Domanda

Come vorrei scrivere questa query utilizzando MetaWhere (in 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'

Sto cercando di aggiungere un metodo alla classe myUser chiamato buddies che restituirà sia friends e inverse_friends da questo Railscast su autoreferenziale associazione .

Apprezzerei tutto l'aiuto!


EDIT: voglio essere in grado di interrogare sul set restituito, in modo tale che posso fare:

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

SOLUZIONE: Nevermind che ultima modifica, Ho appena modificato il mio metodo is_a_buddy_of?(user) a questo, utilizzando l'operatore | sulle associazioni esistenti:

def is_a_buddy_of?(user)
  status = false
  self.buddies.map do |buddy|
    status = true if buddy.id == user.id
  end
  status
end
È stato utile?

Soluzione

perché non basta fare il seguente nel modello User:?

def buddies
  inverse_friends | friends
end

| è l'operatore di unione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top