所以我有一个自引用的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方式获得所有朋友状态吗?
答案 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
希望你有意义!