У меня есть коллекция Эпизодов , которая связана с Сезоном и Шоу .
Мне нужно отобразить их так:
Показать заголовок
.... Номер сезона 1
........ Название серии
........ Название серии
....Сезон № 2
........ Название серии
........ Название серии
Мой контроллер:
def index
@show_ids = Following.find_all_by_user_id(current_user.id).collect(&:show_id)
@seen_ids = SeenEpisode.find_all_by_user_id(current_user.id).collect(&:episode_id)
if @seen_ids.any?
@episodes = Episode.find(:all, :conditions => ["show_id IN (?) AND episodes.id NOT IN (?)", @show_ids, @seen_ids], :joins => [:show, :season])
else
@episodes = Episode.find(:all, :conditions => ["show_id IN (?)", @show_ids], :joins => [:show, :season])
end
end
Мой взгляд:
<ul>
<% @episodes.group_by(&:show).each do |show, episodes| %>
<li><h2><%= show.name %></h2></li>
<% episodes.group_by(&:season).each do |season, episodes| %>
<li><strong><%= season.number %></strong></li>
<% episodes.each do |episode| %>
<li><%= episode.name %></li>
<% end %>
<% end %>
<% end %>
</ul>
Это работает нормально, хотя я знаю, что это не очень хороший метод, и производительность SHIT (например, 10 секунд для 150 записей).Как получить такую группу с хорошей производительностью?
Кроме того, как я могу ее изменить?
if @seen_ids.any?
@episodes = Episode.find(:all, :conditions => ["show_id IN (?) AND episodes.id NOT IN (?)", @show_ids, @seen_ids], :joins => [:show, :season])
else
@episodes = Episode.find(:all, :conditions => ["show_id IN (?)", @show_ids], :joins => [:show, :season])
end