2012-04-12 4 views
1

Ich habe zwei Modelle: Client und Vertrag. Der Client hat 3 Attribute: ID, E-Mail und Clientnummer. Der Vertrag hat auch 3: ID, IP und Client-ID. Client has_many: Verträge. Vertrag gehört zu: Client.Auto-generierte Methoden mit verwandten Modellen

Mit RoR ich Auto gestützter Methoden wie:

Client.find_by_email_and_client_number 'some_email', 1234

aber ich möchte ein Auto-generierte Methode wie:

Client.find_by_email_and_client_number_and_ip 'some_email' , 1234, '192.168.200.54'

nur Client-Attribute verwenden. Ich möchte das IP-Attribut auch vom Vertragsmodell verwenden.

Antwort

0

Sie können dies nicht mit den eingebauten magischen Finder-Methoden von Rails erreichen. Aber man kann es mit einer direkteren Abfrage zu tun, wie folgt aus:

Client.includes(:contracts).where(:email => 'some_email', :ip => '192.168.200.54').where('contracts.client_number = 1234') 

Dies ist ein Beispiel von zwei Rails zu finden Mechanismen: die erste durch eine Hash-direkt ist das Auffinden, der zweite ist ein SQL-Schnipsel.

Es scheint, als ob, was Sie eigentlich hier suchen, ist eine Beziehung von einer Art, obwohl. Wenn client_number als Schlüssel für die has_many Zuordnung eingerichtet ist, könnte es einfacher sein, dies wie folgt abzufragen:

client = Client.find_by_client_number(1234) 
client.contracts.where(:email => 'some_email', :ip => '192.168.200.54') 
Verwandte Themen