1

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というメソッドをクラスに追加しようとしています。buddiesfriendsinverse_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
4

1 に答える 1

1

ユーザーモデルで次のことを実行してみませんか?:

def buddies
  inverse_friends | friends
end

|ユニオン演算子です。

于 2011-03-18T02:37:27.753 に答える