ruby-on-rails 如何在Rails中通过两个级别的has_many查询所有所有对象

tyg4sfes  于 2023-04-22  发布在  Ruby
关注(0)|答案(1)|浏览(172)

我想通过2层has_many关系查询与一个对象相关的所有对象。
假设我们有以下层次结构:博客有很多帖子有很多评论。然后我想所有的评论都与博客。
在我的例子中,我们有:

class Blog < ApplicationRecord
  has_many :posts
end
class Post < ApplicationRecord
  belongs_to :blog
  has_many :comments
end
class Comment < ApplicationRecord
  belongs_to :posts
end

我想要一个给定的博客的所有评论的关系。现在,我双重查询

blog = Blog.find(2) # some block instance
Comment.where(post_id: [blog.posts.pluck(:id)])

一定有更好的办法:)

baubqpgj

baubqpgj1#

您可以添加新的has_many :through关联:

class Blog < ApplicationRecord
  has_many :posts
  has_many :comments, through: :posts
end

然后,您将能够:

blog = Blog.find(2)
blog.comments

此外,您现在可以通过Active Record API预加载(includes和朋友)记录。
更多文档:https://guides.rubyonrails.org/association_basics.html#the-has-many-through-association。

相关问题