MetaWhere(Rails 3)を使用してこのクエリを作成するにはどうすればよいですか?
SELECT "users".* FROM "users"
INNER JOIN "friendships" friends
ON "users"."id" = friends."friend_id"
INNER JOIN "friendships" inverse_friends
ON "users"."id" = inverse_friends."user_id"
WHERE friends."user_id" = 4
AND friends."status" = 't'
AND inverse_friends."friend_id" = 4
AND inverse_friends."status" = 't'
自己参照アソシエーションでこのRailscastからとの両方を返すUser
というメソッドをクラスに追加しようとしています。buddies
friends
inverse_friends
助けていただければ幸いです!
編集:私は私がすることができるように、返されたセットでクエリできるようにしたいです:
def is_a_buddy_of?(user)
not self.buddies.where(:friend_id >> user.id).empty?
end
解決策:最後の編集を気にしないでください。既存の関連付けで演算子をis_a_buddy_of?(user)
使用して、メソッドをこれに変更しました。|
def is_a_buddy_of?(user)
status = false
self.buddies.map do |buddy|
status = true if buddy.id == user.id
end
status
end