【发布时间】:2015-07-20 17:22:40
【问题描述】:
我有一个模型播放列表和一个模型用户,两者都有_many,通过一个连接模型播放列表用户。
在我的playlists#show 操作中,我想打印一个播放列表的所有用户的列表,以及与每个用户关联的前两个播放列表。
现在这就是我所拥有的:
播放列表/show.html.erb
<% @playlist = Playlist.find(params[:id]) %>
<% @playlist.users.each do |user| %>
<%= user.name %>
<%= user.playlists.first.name %>
<%= user.playlists.second.name %>
<% end %>
模型
class User < ActiveRecord::Base
has_many :playlist_users
has_many :playlists, :through => :playlist_users
end
class PlaylistUser < ActiveRecord::Base
belongs_to :playlist
belongs_to :user
end
class Playlist < ActiveRecord::Base
has_many :playlist_users
has_many :users, :through => :playlist_users
end
但是当我删除user.playlists 行并仅打印出user.name 时,性能发生了巨大变化,因为这样数据库只需进行一次查询,而不是数百次。
有谁知道提高效率的方法吗?也许我可以在原始查询中加载所有关联的播放列表?
【问题讨论】:
-
除了spickermann的回答,见N+1个查询问题:guides.rubyonrails.org/…
标签: sql ruby-on-rails ruby database performance