RoRアプリケーションに2つのモデルUsersとFriendshipsがあります
友情テーブルには、user1とuser2の2つの整数フィールドが含まれ、これらのフィールドは両方とも関係を表します。
user1またはuser2フィールドのいずれかに存在する特定のユーザーIDのすべての友達を選択するにはどうすればよいですか?
ありがとう。
RoRアプリケーションに2つのモデルUsersとFriendshipsがあります
友情テーブルには、user1とuser2の2つの整数フィールドが含まれ、これらのフィールドは両方とも関係を表します。
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