0

私のRails 3アプリでは、次のユーザーを獲得しました:

  • 友達(そして彼らもユーザーです)
  • アクティビティ ( PublicActivity経由)

友達のアクティビティを表示する必要があるアクションがあります。

私はこのようにチェーンを介してそれをやりたいです (そして私の質問は:どうすればそれを行うことができますか? ):

@activities = current_user.friends.activities

current_user.friendsしかし、ActiveRecrord::Relation オブジェクトを返すため、機能しません。

undefined method `activities' for #<ActiveRecord::Relation:0xc4d7770> 

次のようにクエリする必要があります。

@activities = PublicActivity::Activity.where(owner_id: current_user.friend_ids)

それは問題なく動作しますが、私が望むほどエレガントではありません:)

では、チェーンを使用して友人の行動を照会するよりエレガントな方法はありますか?

User モデルは次のようになります。

class User < ActiveRecord::Base
  has_many :friendships
  has_many :friends, through: :friendships  # 

  has_many :activities, class_name: "::PublicActivity::Activity", as: :owner
  # ...
end

class Friendship < ActiveRecord::Base
  belongs_to :user
  belongs_to :friend, class_name: "User"
end
4

1 に答える 1

0

あなたが探しているものを正しく読んでいる場合、あなたは参加しようとしているようです。

ActiveRecord は、条件を持つことができる include 呼び出しによる熱心な読み込みをサポートしています。

http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations

これで問題が解決すると思います。

于 2013-05-11T07:45:27.730 に答える