帖子属于用户,用户有多个帖子 帖子也属于主题,主题有很多帖子。
class User < ActiveRecord::Base
has_many :posts
end
class Topic < ActiveRecord::Base
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :user
belongs_to :topic
end
嗯,这很简单,也很容易设置,但是当我显示主题时,我不仅想要该主题的所有帖子,还要想要发布该帖子的用户的user_name和user_photo。但是,这些属性存储在用户模型中,而不是与主题相关联。那我该如何设置呢?
也许它已经可以被调用,因为Post模型有两个外键,一个用户,一个用于主题?
或许,这可能是通过联想的某种“单向”方式。就像Post会是连接模型一样,主题就是has_many:users,:through =&gt; :帖子。但事实恰恰相反。就像用户没有has_many:topics。
所以这甚至需要是has_many:虽然关联?我想我只是对控制器看起来像调用Post的帖子和用户的主题有点困惑。
编辑:说真的,谢谢所有权衡的人。我选择了tal的答案,因为我将他的代码用于我的控制器;但是,我可以轻松地选择j。或者tim。谢谢你们两位。这实现起来非常简单。我想今天可能标志着我对铁轨的热爱。
答案 0 :(得分:3)
在显示主题及其帖子时,您可以获得user_name
和user_photo
...
类似的东西:
@topic.posts.each do |post|
user_name = post.user.name
user_photo = post.user.photo
end
这很简单。对不起,如果我不太了解你的问题。
答案 1 :(得分:2)
好吧,如果您想要的是显示帖子作者的用户名,例如,您可以执行类似的操作(未经测试但应该有效):
@posts = topic.posts.all(:include => :user)
它应该为所有帖子生成一个请求,为用户生成一个请求,并且posts集合应该有用户。
在视图中(haml):
- @posts.each do |post|
= post.user.name
= post.body
答案 2 :(得分:2)
如果我正确理解你的问题,不,这里不需要has_many:通过关联。
如果您想显示在主题中发布的所有用户的列表(跳过帖子信息),那么它会有所帮助。
但是,您希望从帖子中急切加载用户,以防止n + 1次查询。