Rails自我引用has_many通过自我

时间:2013-03-04 06:14:12

标签: ruby-on-rails activerecord

所以我有一个自引用的rails模型。在此模型中,用户拥有许多朋友,并且所有用户都具有状态。我希望用户能够获得其他用户的状态。但是由于递归方法调用,我遇到了堆栈溢出错误。

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方式获得所有朋友状态吗?

2 个答案:

答案 0 :(得分:1)

您可以在此用户模型中创建一个方法

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

不是你想要的方式,但我认为它有用。

答案 1 :(得分: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

希望你有意义!