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
固執することもできます。.all
Account
于 2013-03-01T13:42:18.970 に答える