0

ユーザーと関連ユーザーの関係テーブルがあります。

そうすれば@user.related_users、ユーザーを指す user_id のリストを取得します。

私の見解では、彼らの名前をリストしたいと思います

<% current_user.related_users.each do |u| %>
<%= User.find(u).name %>
<% end %>

誰かがそのビューにアクセスするたびに DB からすべての related_user を取得するため、DB が過負荷になるのではないかと心配しています。

これを行うより良い方法はありますか?それともそれが方法であり、それについて私にできることは何もありませんか?

4

1 に答える 1

2

それが、熱心な読み込みの目的です。理想的には、モデルでrelated_usersは、関連付けである必要があります。

has_many :related_users # add conditions to find the related users if necessary

@user次に、コントローラーで、次のようにフェッチします。

@user = User.includes(:related_users)

これにより、関連するユーザーごとに1つのクエリではなく、関連するすべてのユーザーに対して1つのクエリのみが実行されます(いわゆる1 + N問題)。

または、モデルコードを書き直したくない場合は、関連するすべてのユーザーをコントローラーの変数にロードするだけです。

@related_user = User.where(id: current_user.related_users)

そして、あなたの見解でそれを繰り返します。WHERE id IN (...)これにより、句を含む単一のクエリですべての関連ユーザーがフェッチされます。

于 2012-11-25T12:58:10.550 に答える