Question

Comment puis-je écrire cette requête en utilisant MetaWhere (dans 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'

Je suis en train d'ajouter une méthode sur User appelée classe mybuddies qui retournera les deux friends et inverse_friends de cette Railscast sur l'association autoréférentielle .

Je vous en serais reconnaissant toute aide!


EDIT: Je veux être en mesure de requête sur l'ensemble de retour, de sorte que je peux faire:

def is_a_buddy_of?(user)
  not self.buddies.where(:friend_id >> user.id).empty?
end

SOLUTION: Peu importe que la dernière modification, je viens de ma méthode modifié is_a_buddy_of?(user) à cela, en utilisant l'opérateur | sur mes associations existantes:

def is_a_buddy_of?(user)
  status = false
  self.buddies.map do |buddy|
    status = true if buddy.id == user.id
  end
  status
end
Était-ce utile?

La solution

pourquoi ne faites-vous pas tout ce qui suit dans votre modèle d'utilisateur:

def buddies
  inverse_friends | friends
end

| est l'opérateur syndical.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top