Question

Ne gênez pas, je fricked mes noms d'attributs: (

Ceci est tout à fait possible, en utilisant la syntaxe exacte je - vous avez juste besoin d'être en mesure de préciser


Je ne peux pas sembler que cela fonctionne, et il semble comme un scénario assez commun qu'il doit y avoir une solution, mais je ne suis pas avoir de chance avec la terminologie correcte pour obtenir un résultat Google utile.

Je veux faire ceci:

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

Avec l'effet qu'un nouveau Client est créé avec user_id = u.id.

Puis-je obtenir les trouveurs dynamiques agréable à travers une relation de has_many? Sinon, pourquoi?

Merci :)

Était-ce utile?

La solution 2

Ceci est tout à fait possible, en utilisant la syntaxe exacte je - vous avez juste besoin d'être en mesure de préciser

Autres conseils

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

fonctionne si vous avez ensemble de relations has_many. Cependant, il ne soulèvera pas l'erreur de validation si vous avez des validations définies sur votre objet client et silencieusement échouer si la validation échoue.

Vous pouvez vérifier la sortie de votre console lorsque vous faites

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>

et le user_id sera défini mais pas l'identifiant du client, car la validation a échoué et que le client n'a pas été créé

Alors cela devrait créer le client que si vous passez tous les attributs nécessaires de l'objet client et la validation pour objet client a passé avec succès.

Disons donc que votre modèle de client a la validation sur le nom aussi bien en dehors de courriel, alors vous devriez faire

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">
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top