0
4

2 に答える 2

3

Rails のデフォルト メカニズムを使用して、関連付けをクエリに含めることができます。さらに、大規模なデータセットを反復処理するときは、find_each を使用する必要があります。バッチでオブジェクトをフェッチするため、メモリが保護されます。

@users = User.includes(:account)

<% @users.find_each do | user | %>
  <%= user.account.name %>
<% end %>
于 2013-03-01T12:33:33.120 に答える
1

@all_accounts = Account.where(:id => users.map{ | user | user.account_id } )実際にそのクエリを実行しないため、時間がかかります。クエリは、実際に必要になったとき、つまり を呼び出したときに実行されますdetect

すべてのユーザーに対してクエリを実行していAccountます。これは、毎回大量の s をプルしているため、元のクエリよりも明らかに重いクエリAccountであり、長い待ち時間があります。

解決策は明らかに、他の人が推奨して使用することですが、最初のインスタンスでそのクエリを実行することで、クエリの最後にincludes固執することもできます。.allAccount

于 2013-03-01T13:42:18.970 に答える