2009-10-07 211 views
0

目前,我在rails应用程序中有一个6模型ruby,我添加了authlogic。 整体的设置是Ruby on Rails用户设置

User :has_many categories, topics,messages 
Categories has_many topics, 
Topics has_many messages 

(有和相应的相对belongs_to的链接)。

当我尝试访问current_user.categories.find(2)时,控制器中没有返回任何结果。

而且,当我尝试运行此

current_user.topics.find(params[:topic_id]).messages.build 

然后,

@msg = current_user.messages.build(params[:message]) 
@msg.save 

它不保存从的has_many user_ID的。被该CURRENT_USER指令之前的工作中,加入

这一计划的所有功能。

我是不是做与设置错了吗?或与执行?

因为关联在构建后没有保存,我以后可以在模型中添加user_id字段吗?

对不起所有的问题,并提前致谢。

回答

1

我认为你最好的选择是逐步进行。 current_user返回什么?该用户的ID是否与你的数据库中的一个相匹配?该用户是否有任何类别?他们中的任何人有2的ID?

如果您可以将您的问题隔离在链接调用中的单个图层中,则调试起来会更容易。

+1

我同意,这是一个很大的耦合。你不知道许多层中的哪一层破坏了。 它也可能有助于打开ActiveRecord日志记录来查看正在生成的查询。 – 2009-10-08 03:03:24

0

谢谢凯尔。 我已经解决了在模型中使用过滤器而不是使用控制器通过关联在创建上分配它的问题。 Current_user仅使用authlogic返回当前用户的记录。 我喜欢这个项目在哪里鞠躬,并且可能会在部分视觉调整,安全性和更多css之后部署它。 无论您正在开发什么,回调和过滤器都令人惊叹。 另外,如果您需要从application_controller获取变量到模型,请使用美元符号ruby变量,而不是类实例变量(at-sign)。 相比于自带的Php或sintra应用程序,Rails非常简单。 此外,有多少模型用于rails应用程序?

+0

如果您使用的是美元符号,那么您正走在黑暗的道路上。美元符号用于全局变量,而全局变量通常意味着您将紧密耦合您的类。 不确定你的意思是Rails应用程序使用了多少个模型 - 有些项目可能有少数几个,我们有几十个,其他几个有几百个。取决于您的应用程序的范围和代码库的成熟度。博客或Twitter需要比Mint.com更少的模型或其他内容。 – Kyle 2009-10-08 04:58:22

+0

我不想调试大型应用程序。 6个模型对我来说已经足够了。 如果我不使用全局,我怎样才能从控制器获取当前用户对象到模型?这是我的应用程序中唯一的全球化...实际上,我第一次需要使用红宝石。 – CodeJoust 2009-10-08 11:36:38