我有三个模特:电影,电影和跑步。电影和电影之间有一种贯穿始终的关系,就像:
class Movie < ApplicationRecord
has_many :cinemas, -> { distinct }, through: :runs
has_many :runs
end我试图展示某些电影的影院列表,并列出每家电影院的放映情况:
电影1
我想不出如何减少数据库调用。现在我正在为每一家电影院打电话,所以它与数量或电影院成正比。在我看来不对
@movie.cinemas.each do |cinema|
cinema.runs.where(movie_id: @movie.id).each do |run|
= run.time在这方面需要帮助
发布于 2016-12-21 17:30:37
您可能需要首先向Run添加关系
class Run < ApplicationRecord
belongs_to :movie
belongs_to :cinema
end然后使用includes并从runs启动循环。
例如:
@movie = Movie.where(... the condition ...).includes(:runs => :cinemas).first
@movie.runs.group_by(&:cinema_id).each do |movie_id, runs|
<%= runs.first.cinema.name %>
runs.each do |run|
<%= run.time %>
end
end请注意,
runs.group_by(&:cinema_id) 的语法糖。
runs.group_by{|run| run.cinema_id }通过方法的用法示例:
(1..6).group_by {|i| i%3} #=> {0=>[3, 6], 1=>[1, 4], 2=>[2, 5]}https://stackoverflow.com/questions/41268353
复制相似问题