1

我的 RoR 应用程序中有两个模型用户友谊

友谊表包含两个整数字段user1user2,这两个字段都表示一种关系。

我将如何为存在于user1user2字段中的给定用户 ID 选择所有朋友?

谢谢。

4

3 回答 3

2

您可以使用find_by_sql

http://apidock.com/rails/ActiveRecord/Base/find_by_sql/class

于 2012-04-23T13:08:15.067 回答
1

查看 ActiveRecord 的has_many方法文档。我认为您可以执行以下操作:

class User
  has_many :friendships, :finder_sql => lambda { |user| ["SELECT * FROM friendships WHERE user1 = :id OR user2 = :id", :id => user.id] }

  def friends
    ids = friendships.map(&:user1) + friendships.map(&:user2)
    ids.uniq!
    ids.delete(id)
    User.find(ids)
  end
end
于 2012-04-23T14:39:11.920 回答
1
class User
  def friends
    user_ids = Friendship.where(["user1 = :id OR user2 = :id", :id => self.id]).inject([]) {|sum,x| sum << x.user1 && sum << x.user2 }.uniq-[self.id]
    User.find(user_ids)
  end
end
于 2012-04-23T16:19:26.883 回答