Rails,如何进行不使用ID的自定义活动记录连接

时间:2012-04-23 13:06:41

标签: ruby-on-rails ruby activerecord

我的RoR应用程序中有两个模型 Users Friendships

friendships 表包含两个整数字段 user1 user2 ,这两个字段代表一种关系。

如何为 user1 user2 字段中存在的给定用户ID选择所有朋友?

感谢。

3 个答案:

答案 0 :(得分:2)

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