如果这甚至是一个的has_many:通过关联?
-
23-09-2019 - |
题
一个邮政belongs_to的用户,以及用户的has_many帖子。结果 甲邮政还belongs_to的一个主题,和一个主题的has_many帖子。
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这个职务。然而,这些属性被存储在用户模式,不依赖于主题。所以,我怎么会去设置这事呢?
也许它已经可以被称为自邮模型有两个外键,一个是用户,一个是主题?
或者,也许这是某种通过assiociation“单向”的has_many的。喜欢该职位将是加盟模式,和主题将HAS_MANY:用户:通过=>:帖子。但这种反向是不正确的。像用户没有的has_many:主题
所以将这个必要一定的has_many:虽然联想?我想我感到困惑的控制器将是什么样子给通话双方的邮政和邮政对于给定的主题的用户只是一点点。
编辑:说真的,谢谢所有称重在我选择了tal的答案,因为我用自己的代码为我的控制器。不过,我可以很容易地选择了两个学家的或添的替代。谢谢你们为好。这是如此实现该死的简单。我想今天可能会记住我的风流韵事与轨道的开始。
解决方案
好吧,如果你想要的是显示一个帖子的作者的用户名,例如,你可以这样做(未测试,但应工作):
@posts = topic.posts.all(:include => :user)
它应产生为所有帖子一个请求,一个用于用户,和柱收集应具有用户。
在一个视图(这里HAML):
- @posts.each do |post|
= post.user.name
= post.body
其他提示
您可以显示一个主题,它的职位时,你得到user_name
和user_photo
...
是这样的:
@topic.posts.each do |post|
user_name = post.user.name
user_photo = post.user.photo
end
它的简单。对不起,如果我不明白你的问题非常好。
如果我正确地理解你的问题,不,是的has_many:通过关联这里不需要
如果你想显示一个主题贴(跳过该发布信息)的所有用户的列表中,那么这将是有益的。
您会想急于负荷帖子的用户,不过,以防止N + 1个查询。