2011-07-31 5 views
0

ActiveRecordネストされたレコードでの使用方法を含める?私は現在、次のを持っている

@threads = current_user.threads.includes(:user, :thread_members) 

私は、その後のスレッドを取ると、次の操作を行います。ここ

@threads.each do |thread| 

    thread_members = thread.thread_members_active(current_user) 

     @threadList << { 
     :id => thread.id, 
     :uuid => thread.uuid, 
     :user_id => thread.user.id, 
     :last_activity_at => thread.last_activity_at, 
     :user_count => thread_members.length, 
     :user_photos => thread_members.collect { |thread_member| 
      { 
      :id => thread_member.user.id, 
      :photo => thread_member.user.photo(:thumb), 
      :name => thread_member.user.full_name 
      } 
     }, 
     :caption => thread.caption 
     } 

end 

問題は、すべての各ループ、レールが同じ基本的なレコードをDBに当たっているということです。ログにCACHEが表示されているように、Railsはキャッシュされているように見えますが、それは大変です。私はいくつかのタイプのインクルードを行うことができると願っていますので、dbリクエストはそれほど多くありませんでした。

これをどのように最適化することができますか?あるDBヒットのすべてのユーザーを含む何かの周り何か?

おかげ

+0

thread_members_activeのコードは何ですか? –

+0

@Cypherこれは、以下を行うメソッドです。return self.thread_members.joins(:user).where( "users.guest = false OR users.guest = true AND users.fnameはNULLでないかusers.id =#{ current_user.id} ") – AnApprentice

答えて

1

あなたがループ内の任意のDBクエリをしたくない場合は、あなたが含まれているという名前の団体であっ使われているすべてのものを定義する必要があり、その代わりにthread_members_active方法であなたがthread_members_activeを定義したいです同じ振る舞いを持つ関連付けこの協会でもuserincludesを使用する必要があります。あなたに今より多くを与えることはできませんが、多分それはちょっと役立ちます。

編集:このドキュメントの「団体の積極的なロード」をチェックしてください一部:

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

関連する問題