Domanda

Non mi importa, io fricked i miei nomi degli attributi: (

Questo è del tutto possibile, utilizzando la sintassi esatta ho usato - solo bisogno di essere in grado di precisare


Non riesco a farlo funzionare, e sembra che uno scenario abbastanza comune che ci deve essere una soluzione, ma non sto avendo fortuna con la terminologia corretta per ottenere un risultato utile Google.

Voglio fare questo:

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

Con l'effetto che un nuovo Client viene creato con user_id = u.id.

Vengo i bei cercatori dinamici attraverso una relazione has_many? Se no, perché?

Grazie :)

È stato utile?

Soluzione 2

Questo è del tutto possibile, utilizzando la sintassi esatta ho usato - solo bisogno di essere in grado di precisare

Altri suggerimenti

Questo

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

funziona se avete impostato rapporto has_many. Tuttavia, non genererà errore di convalida se avete convalide impostati sul vostro oggetto client e sarà silenziosamente esito negativo se la convalida non riesce.

È possibile controllare l'output nella console quando si esegue

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>

e l'user_id sarà impostato ma non l'ID del client perché la convalida non è riuscita e il client non è creato

Quindi questo dovrebbe creare il cliente solo se si passa tutti gli attributi richiesti di oggetto client e la convalida per oggetto client ha superato con successo.

Quindi, consente di dire che il vostro modello di cliente ha la validazione su nome e parte-mail, allora si dovrebbe fare

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">
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top