2017-02-07 3 views
0

以下のように、すべてのユーザーの投稿を表示しています。Rails 4:コントローラーにリレーションを事前に設定する必要があります。

<% @users do |user| %> 
    <div><%= user.name %> : </div> 
    <% user.posts.each do |post| %> 
     <div><%= post.title %></div> 
    <% end %> 
<% end %> 

コントローラにあらかじめ(特にデータベースの速度のために)投稿を読み込む方が良いですか?

または、ユーザーをフェッチしてビューに投稿するほうがよいですか?

@users = User.all 

答えて

0

あなたがコレクションを反復処理し、これは各レコードが別々のデータベースクエリを作成するN + 1クエリ問題と呼ばれるものを作成し、子assocationsにアクセスします。

100回のデータベースクエリを使用して1回のリクエストが終了すると、サーバーはすぐに停止するようになります。

<% @users do |user| %> 
    <div><%= user.name %> : </div> 
    <!-- This line will create a N+1 query --> 
    <% user.posts.each do |post| %> 
     <div><%= post.title %></div> 
    <% end %> 
<% end %> 

だから、スケールする(または動作する)アプリケーションを構築するには、プリロードの関連付けが必要です。 ActiveRecord provides several methods such as .includes, .preload, .eager_load, .join.left_outer_joins(Rails 5)はそれぞれ異なる結果をもたらし、さまざまなユースケースに適しています。

+0

ありがとうございました –

関連する問題