我有一组如下所示的模型(此处显示的实际设置是一个简化的模型):
Blog
has_many :posts
Post
has_many :comments
# contributor_id is a part of Post
Contributor
# having fields such as :id, :name, etc.
我像这样遍历它们:
Blog.all.includes(:posts => :contributors).each do |blog|
render partial: 'blog_item', :locals => { :blog => blog }
end
在' blog_item
'部分视图中,我想确定特定的贡献者(id:123,名称:“john”)是否包含在posts
. 作为一个一般问题,这很容易,但我想在没有 SQL 调用的情况下执行此操作(导致 N+1)。
目前,我正在解决这个问题:
blog.posts.pluck(:contributor_id).include?(123)
这会导致 SQL 调用(以及随后的 N+1)。
我不能做这样的事情:
blog.posts.include?(:contributor_id)
那么,如何在没有额外的 SQL 调用的情况下解决这个问题呢?