Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在一个子段的一个急切的分段中寻找一个属性,而不引起SQL调用?_Ruby On Rails_Select N Plus 1 - Fatal编程技术网

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)