Frage

Wie würde ich diese Abfrage mit schreiben? Metaker (in Schienen 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'

Ich versuche, mir eine Methode hinzuzufügenUser Klasse gerufen buddies Das wird beide zurückgeben friends und inverse_friends davon Railscast über die Selbstreferenzielle Vereinigung.

Ich würde mich über jede Hilfe freuen!


Bearbeiten: Ich möchte in der Lage sein, die zurückgegebene Menge abfragen zu können, so dass ich tun kann:

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

Lösung: Nun, ich habe diese letzte Bearbeitung, ich habe gerade meine geändert is_a_buddy_of?(user) Methode dazu verwenden die | Betreiber in meinen bestehenden Assoziationen:

def is_a_buddy_of?(user)
  status = false
  self.buddies.map do |buddy|
    status = true if buddy.id == user.id
  end
  status
end
War es hilfreich?

Lösung

Warum machen Sie nicht einfach das Folgende in Ihrem Benutzermodell ?:

def buddies
  inverse_friends | friends
end

| ist der Gewerkschaftsbetreiber.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top