我的 RoR 应用程序中有两个模型用户和友谊
友谊表包含两个整数字段user1和user2,这两个字段都表示一种关系。
我将如何为存在于user1或user2字段中的给定用户 ID 选择所有朋友?
谢谢。
我的 RoR 应用程序中有两个模型用户和友谊
友谊表包含两个整数字段user1和user2,这两个字段都表示一种关系。
我将如何为存在于user1或user2字段中的给定用户 ID 选择所有朋友?
谢谢。
您可以使用find_by_sql
http://apidock.com/rails/ActiveRecord/Base/find_by_sql/class
查看 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
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