Ruby on rails 在一个子段的一个急切的分段中寻找一个属性,而不引起SQL调用?
我有一组模型,如下所示(此处显示的实际设置是一个简化模型): 我像这样迭代它们:Ruby on rails 在一个子段的一个急切的分段中寻找一个属性,而不引起SQL调用?,ruby-on-rails,select-n-plus-1,Ruby On Rails,Select N Plus 1,我有一组模型,如下所示(此处显示的实际设置是一个简化模型): 我像这样迭代它们: Blog.all.includes(:posts => :contributors).each do |blog| render partial: 'blog_item', :locals => { :blog => blog } end blog.posts.include?(:contributor_id) 在“blog\u item”部分视图中,我想确定帖子中是否包含特定的投稿人(i
Blog.all.includes(:posts => :contributors).each do |blog|
render partial: 'blog_item', :locals => { :blog => blog }
end
blog.posts.include?(:contributor_id)
在“blog\u item
”部分视图中,我想确定帖子中是否包含特定的投稿人(id:123,姓名:“john”)。一般来说,这很容易,但我想在没有SQL调用的情况下执行此操作(导致N+1)
目前,我正在这样解决这个问题:
blog.posts.pluck(:contributor_id).include?(123)
这会导致SQL调用(随后是N+1)
我不能这样做:
Blog.all.includes(:posts => :contributors).each do |blog|
render partial: 'blog_item', :locals => { :blog => blog }
end
blog.posts.include?(:contributor_id)
那么,在没有额外的SQL调用的情况下,如何解决这个问题呢?我已经尝试解决这个问题很长时间了。张贴问题,直接阅读文章的一小节,并在2分钟内解决
@contributor = Contributor.find(123)
Blog.all.includes(:posts => :contributors).each do |blog|
render partial: 'blog_item', :locals => { :blog => blog }
end
# Inside blog_item
blog.posts.map(&:contributor).include?(@contributor)