Posso scope dinamico cercatori basato sugli attributi di un oggetto?
-
19-09-2019 - |
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 :)
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">