Ruby on rails 不获取N+;1查询时,Rails中有多个关系?

Ruby on rails 不获取N+;1查询时,Rails中有多个关系?,ruby-on-rails,select-n-plus-1,Ruby On Rails,Select N Plus 1,我有一个Movie模型和一个MovieStream模型。关系是电影有很多MediaType(MediaType属于Movie) MediaType有两个属性“url\u break”(真/假)和“dvd”(真/假) 我认为: Movie.all.includes(:movie_item).each do |movie| render partial: 'movie_item' end 在movie\u项中-部分我已经(简化): 没有N+1? end看起来您只需要使用。includes 您

我有一个
Movie
模型和一个
MovieStream
模型。关系是电影
有很多
MediaType(MediaType
属于
Movie)

MediaType有两个属性“url\u break”(真/假)和“dvd”(真/假)

我认为:

Movie.all.includes(:movie_item).each do |movie|
  render partial: 'movie_item'
end
movie\u项中
-部分我已经(简化):

没有N+1?
end

看起来您只需要使用
。includes


您可以在movie类中定义具有多个
(s)的作用域

class电影{where(url:false)},类名:“MediaType”
有很多:非dvd媒体类型,->{where(dvd:false)},类名:“MediaType”
有很多:dvd\U媒体类型,->{where(dvd:true)},类名:“MediaType”
结束
那么在你看来,

Movie.all.includes(:valid_url_media_types, :not_dvd_media_types, :dvd_media_types).each do |movie|
  render partial: 'movie_item', movie: movie
end
你的部分:

<h1><%= movie.title %></h1>

<% if movie.valid_url_media_types.blank? %>
  No media types exist
<% else %>
<h2>Streams</h2>
<% streams = movie.not_dvd_media_types.each do |media_type| %>
  * <%= media_type.name %>
<% end %>

<h2>Dvd's</h2>
<% dvds = movie.dvd_media_types.each do |media_type| %>
  * <%= media_type.name %>
<% end %>

不存在任何媒体类型
溪流
* 
Dvd的
* 

不幸的是,没有(实际上我已经做了,应该在我的简化描述中包括这一点)。循环中的.where会导致sql调用,如果我没有弄错的话,.where调用总是会导致sql调用。我怎么会错过这个呢!?这正是我需要的。非常感谢!!
Movie.includes(:media_type).all.each do |movie|
  render partial: 'movie_item', :locals => { :movie => movie }
end
Movie.all.includes(:valid_url_media_types, :not_dvd_media_types, :dvd_media_types).each do |movie|
  render partial: 'movie_item', movie: movie
end
<h1><%= movie.title %></h1>

<% if movie.valid_url_media_types.blank? %>
  No media types exist
<% else %>
<h2>Streams</h2>
<% streams = movie.not_dvd_media_types.each do |media_type| %>
  * <%= media_type.name %>
<% end %>

<h2>Dvd's</h2>
<% dvds = movie.dvd_media_types.each do |media_type| %>
  * <%= media_type.name %>
<% end %>