2017-02-07 8 views
0

私を助けてくれてありがとう。私はレール4.2を使用しています。Rails - 他のオブジェクトにオブジェクトを取得する

エポックとイベントの2つのモデルがあります。あらゆる時代には多くの出来事があります。

私はすべてのエポックのためのイベントでリストを作りたい:

<% @epoches.each do |epoch| %> 
    <div><%= epoch.main_title %> : </div> 
    <% @events.each do |event| %> 
     <div><%= event.title %></div> 
    <% end %> 
<% end %> 

私epoches_controller.rbは、次のようになります。私は、コンソールで呼び出すと

def epochline 
    @epoches = Epoch.all 
    @events = Epoch.find(params[:id]).event.all 
end 

「Epoch.find(1).eventsを.all "それは素晴らしい動作しますが、Webサーバーのエラーを返します - " ID '= "でEpochを見つけることができませんでした。何が間違っているのですか?この問題を解決するためにコントローラを編集するにはどうすればよいですか?

答えて

3

コントローラー内の@events = Epoch.find(params[:id]).event.all行を削除してください。このビューは、これでなければなりません。

<% @epoches.each do |epoch| %> 
    <div><%= epoch.main_title %> : </div> 
    <% epoch.events.each do |event| %> 
     <div><%= event.title %></div> 
    <% end %> 
<% end %> 

編集:することはでき、あなたのコントローラで@epoches = Epoch.includes(:events)を実行して熱心な負荷イベント。これにより、エポックとイベントの両方がキャッシュされ、ビュー内でSQLクエリを実行できなくなります。

+2

また、 '@epoches = Epoch.includes(:events)'を実行してeager query( 'epoch。イベント ') –

+0

@mr_sudacaできればあなたのコメントをさらに4回upvoteします。ビューはデータベースを照会すべきではなく、特にn + 1回の照会を実行するときにすべきです。 – engineersmnky

+0

良い点、@mr_sudaca答えに含まれている編集を提案して受け入れますか? –

関連する問題