Frage

Stört mich nicht, fricked ich meine Attributnamen auf: (

Dies ist durchaus möglich, die genaue Syntax habe ich - Sie müssen nur in der Lage sein, zu buchstabieren


Ich kann nicht scheine dies zu Arbeit zu bekommen, und es scheint, wie ein gemeinsames genug Szenario, dass es eine Lösung sein muss, aber ich habe kein Glück mit der richtigen Terminologie ein hilfreiche Google Ergebnis zu erhalten.

Ich möchte, dies zu tun:

u = User.first
u.clients.find_or_create_by_email('example@example.com')

Mit dem Effekt, dass ein neues Client mit user_id = u.id erstellt wird.

Kann ich die schönen dynamischen Findern durch eine has_many Beziehung bekommen? Wenn nicht, warum?

Danke :)

War es hilfreich?

Lösung 2

Dies ist durchaus möglich, die genaue Syntax habe ich - Sie müssen nur in der Lage sein, zu buchstabieren

Andere Tipps

Das

u = User.first
u.clients.find_or_create_by_email('example@example.com')

funktioniert, wenn Sie has_many Beziehung gesetzt haben. Es wird jedoch nicht Validierungsfehler erhöhen, wenn Sie irgendwelche Validierungen haben setzen auf Ihrem Client-Objekt, und es wird stillschweigend fehl, wenn die Überprüfung fehlschlägt.

Sie können die Ausgabe in der Konsole überprüfen, wenn Sie tun

u.clients.find_or_create_by_email('example@example.com') # => #<Client id: nil, email: 'example@example.com', name: nil, user_id: 1, another_attribute: nil, active: true, created_at: nil, updated_at: nil>

und die user_id eingestellt werden, aber nicht die ID des Client, da die Validierung fehlgeschlagen ist und der Kunde wird nicht erstellt

Also das den Client erstellen sollte nur, wenn Sie alle erforderlichen Attribute von Client-Objekt und die Validierung für die Client-Objekt übergeben erfolgreich bestanden hat.

So kann sagen, Ihr Client-Modell als auch auseinander Validierung auf dem Namen von E-Mail hat, dann sollten Sie tun

u.clients.find_or_create_by_email_and_name('example@example.com', 'my_name') #=> #<Client id: 1, email: 'example@example.com', name: 'my_name', user_id: 1, another_attribute: nil, active: true, created_at: "2009-12-14 11:08:23", updated_at: "2009-12-14 11:08:23">
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top