У меня есть эти модели:
class Children < ActiveRecord::Base
has_many :tickets
has_many :movies, through: :tickets
end
class Movie < ActiveRecord::Base
has_many :tickets
has_many :childrens, through: :tickets
belongs_to :cinema
end
class Ticket < ActiveRecord::Base
belongs_to :movie, counter_cache: true
belongs_to :children
end
class Cinema < ActiveRecord::Base
has_many :movies, dependent: :destroy
has_many :childrens, through: :movies
end
Теперь мне нужно перейти на страницу "Кинотеатры". Я хочу напечатать сумму (количество, размер?) детей только для фильмов в этих кинотеатрах, поэтому я написал следующее:
- в cinemas_controller.rb:
@childrens = @cinema.childrens.uniq
- в кинотеатрах /show.html.erb:
<% @childrens.each do |children| %><%= children.movies.size %><% end %>
но, очевидно, у меня есть маркер bullet, который предупреждает меня о Counter_cache, и я не знаю, куда поместить этот counter_cache из-за другого идентификатора для фильма.
А также без counter_cache то, что у меня есть, - это не то, что я хочу, потому что я хочу подсчитать, сколько детей в этом кино берут их из билетов из многих дней в этом кинотеатре.
Как?
UPDATE
Если, на мой взгляд, я использую этот код:
<% @childrens.each do |children| %>
<%= children.movies.where(cinema_id: @cinema.id).size %>
<% end %>
gem bullet ничего мне не говорит, и все работает правильно.
Но у меня есть вопрос: этот способ запроса к базе данных более тяжелый из-за кода в представлениях?