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 回答