我的RoR应用程序中有两个模型 Users 和 Friendships
friendships 表包含两个整数字段 user1 和 user2 ,这两个字段代表一种关系。
如何为 user1 或 user2 字段中存在的给定用户ID选择所有朋友?
感谢。
答案 0 :(得分:2)
您可以使用find_by_sql
http://apidock.com/rails/ActiveRecord/Base/find_by_sql/class
答案 1 :(得分: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
答案 2 :(得分: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