我有以下型号
class Forum < ActiveRecord::Base
has_many :topics
end
class Topic < ActiveRecord::Base
belongs_to :forum
has_many :posts
end
class Posts < ActiveRecord::Base
belongs_to :topic
belongs_to :user
end
我想加入这些关联(在主题和帖子上有一些条件),所以我做Topic.joins(:forum, :posts).where(some condition)
,但我想访问所有三个表中的属性。我怎样才能做到这一点?
答案 0 :(得分:0)
您可以像这样进行多重连接。所有这三个表都可用,您只需要在表格中指定。
Topic.joins(:forum, :posts).where('topics.foo' => 'bar').where('posts.whizz' => 'bang)
两个警告是,这是一个多重内部联接,所以主题将需要同时显示论坛和帖子以及哪里是一起的。对于外连接或'或'逻辑在哪里你必须得到更好的。但是你可以为.joins和.where编写sql来实现这一点。使用.includes而不是.joins是另一种获得外部联接行为的方法 - 但当然你可能会加载很多记录。
澄清下面的评论,并显示其他用户建议语法的改进(更多rails-y)语法:
topics = Topic.joins(:forum, :posts).where(topic: {foo: 'bar'}).where(posts: {whizz: 'bang'})
topics.each do |t|
puts "Topic #{t.name} has these posts:"
t.posts.each do |p|
puts p.text
end
end