我遇到了有关Rails 3和新routes.rb一般结构性问题让我有点困惑。感谢您的帮助或指导。Rails 3嵌套用户资源(设计)结构
我有一个嵌套资源的论坛应用程序。有部分,主题和答复。在routes.rb中的结构是这样的:
resources :sections do
resources :topics do
resources :replies
end
end
我section.rb:
has_many :topics
has_many :replies, :through => :topics
我topic.rb:
belongs_to :section
has_many :replies
我reply.rb:
belongs_to :topic
这是奇妙的工作。现在,这是我困惑的地方。
我添加了一个使用Devise的用户控制器,并有一个可用的用户名登录/注销系统。我试图将“current_user”与答复和主题连接起来。我认为我对如何修复这些模型有了一个好主意,但是我对route.rb文件中的操作感到困惑。
对于user.rb,我相信我需要添加“has_many:topics”和“has_many:回复,:through =>:topics”。然后在我的主题中,我需要添加“belongs_to:user”。我相信reply.rb保持不变?
至于routes.rb我有点难住。如果我编辑路线并添加用户,我会得到像sectionid/username/topicid /这样的路径,但我不一定需要在类似的路线中存储用户名。因此,我要将用户嵌入部分和主题之间,或者我可以将用户从routes.rb文件中取出。
因此,在我的主题控制器,当我创建,我在哪里设置其用户?我是否会做一个before_filter,并且有一个方法会变为'@user = current_user',并在创建新主题时保存用户?或者我需要编辑创建方法? – a3uge 2011-04-06 13:38:58
我认为我必须做类似... @topic = section.current_user.topics.build(params [:topic])...但显然不起作用,因为current_user不是section的属性。 – a3uge 2011-04-06 13:48:25
current_user是Devise的助手。如果没有用户登录,并且用户对象(如果用户已登录),则为零。在您之前的过滤器中,您需要如下所示:before_filter:authenticate_user !,:except => [:index]。这需要登录此控制器的所有方法(索引除外)。看看我的链接(和本教程的其他章节)。 – 2011-04-06 15:04:49