0

とRailsの5に参加したデータを表示するための最良の方法を把握することはできません。シネマムービーはそうのような実行を通じて関係を持っている:は、私は3つのモデルを持っているhas_many_through関係

class Movie < ApplicationRecord 
    has_many :cinemas, -> { distinct }, through: :runs 
    has_many :runs 
end 

私は、各映画のためのランのリストを特定の映画の映画館のリストを表示しようとしている:

作品1

  1. シネマ1
    • 12:30
    • 午後3時00
  2. シネマ2
    • 午前15時30分
    • 16時00分

私は、データベース・コールを削減する方法を見つけ出すことはできません。今、私は、各映画のために電話をかけるので、数や映画館のためにその比例しています。

が 右に私には思われません
@movie.cinemas.each do |cinema| 
    cinema.runs.where(movie_id: @movie.id).each do |run| 
     = run.time 

あなたはincludesを使用してrunsからループを開始するとRun最初

class Run < ApplicationRecord 
    belongs_to :movie 
    belongs_to :cinema 
end 

に関係を追加する必要があり、この

答えて

0

とが必要です。

runs.group_by(&:cinema_id) 

runs.group_by{|run| run.cinema_id } 

group_by方法の使用例の構文糖である

@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 

注意こと:例えば

(1..6).group_by {|i| i%3} #=> {0=>[3, 6], 1=>[1, 4], 2=>[2, 5]} 
+0

しかし、どのような映画館のリストについてはどうですか? **:(movie_id&) – kabukiman

+0

あなたが使用することができます '' –

+0

は申し訳ありませんが、私はそれをタイプミスruns.first.cinema'、それは私が** @ movie.runs.group_by変更する場合にのみ機能します** @ movie.runs.group_by(&:cinema_id)に:手段** あなたは何を "&" の "(cinema_id&)" を説明できますか? –

関連する問題