2016-07-28 47 views
0

Ich habe ein Firmenmodell mit einem Schlüssel (Domäne). Ich habe ein Kontaktmodell, das auch eine Domain hat.Letzte has_one von einem has_many

Ich habe erfolgreich eine has_many Beziehung zwischen diesen beiden eingerichtet.

has_many :contacts, class_name: 'Contact', primary_key: 'domain', foreign_key: 'domain' 

Jeder Kontakt hat ein date Feld auf sich. Ich möchte eine Beziehung, die mir den letzten Kontakt (von date) aus der contacts Beziehung bringt.

Ist das möglich?

Ich bin bewusst, dass ich etwas tun könnte, wie:

def most_recent_contact 
    contacts.order('date desc null last').first 
end 

Ist dies der beste Weg? Ist es die Schienen Weg? Offen für Vorschläge.

+1

meinst du - letzten Kontakt für jeden x 'Gesellschaft der aus der Kontaktbeziehung? – kiddorails

+0

ja. Für eine bestimmte Firma sind die Kontakte also für diese Firma (zB alle bei xyz.com). – Nick

Antwort

1

Nun, scheint dies eine Möglichkeit zu sein, aber es funktioniert nicht „Wiederverwendung“ die Beziehung (sie wiederholt es) ...

has_many :contacts, class_name: 'Contact', primary_key: 'domain', foreign_key: 'domain' 
has_one :most_recent_contact, -> { order date: :desc }, class_name: 'Contact', primary_key: 'domain', foreign_key: 'domain' 
+1

Beide Ansätze sind gut genug, um diese Informationen abzurufen. Mir hat es wirklich gut gefallen! Ihre resultierende Datenbankabfrage bleibt gleich :) – kiddorails

+0

Danke. Es kritisiert mich, dass ich es nicht lehren kann, die has_many zu verwenden, da diese bereits die Klassen-, Primär- und Fremdschlüssel definiert hat. – Nick