1

RoRアプリケーションに2つのモデルUsersFriendshipsがあります

友情テーブルには、user1とuser2の2つの整数フィールドが含まれ、これらフィールドは両方とも関係を表します。

user1またはuser2フィールドのいずれかに存在する特定のユーザー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 に答える