0

だから私は自己参照レールモデルを持っています。このモデルでは、ユーザーには多くの友達がいて、すべてのユーザーにステータスがあります。ユーザーが他のユーザーのステータスを取得できるようにしたいと考えています。しかし、再帰的なメソッド呼び出しが原因で、スタック オーバーフロー エラーが発生します。

class User
  has_many :statuses

  has_many :friendships
  has_many :friends, :through => :friendships

end

言えるようになりたい

class User
  has_many :statuses

  has_many :friendships
  has_many :friends, :through => :friendships
  has_many :friend_statuses, :through => :friends, :class_name => :statuses
end

ただし、これは明らかに再帰呼び出しを作成し、SO につながります。セマンティックな RESTful な方法ですべてのフレンドのステータスを取得する方法はありますか?

4

2 に答える 2

1

このようなユーザーモデルでメソッドを作成できます

def friends_statuses
  Status.where(user_id: friends.pluck(:id))
end

あなたがやりたいと思った方法ではありませんが、うまくいくと思います。

于 2013-03-04T08:14:21.507 に答える
1

関連付けの作成は必須ですか? コントローラー自体で友達のステータスを取得できると思います。何かのようなもの:

@user = User.find(some_id_here)
@friends = @user.friends.includes(:statuses)

@friends を反復処理して、次のようなステータスを取得できます。

@friends.each do |friend|
  friend.status.each do |status|
    #do something with friend and status
  end
end

それがあなたにとって理にかなっていることを願っています!

于 2013-03-04T08:22:59.577 に答える