Pergunta

Não me importa, eu fricked meus nomes de atributos: (

Este é inteiramente possível, usando a sintaxe exata que eu usei - você só precisa ser capaz de soletrar


Eu não consigo chegar a este trabalho, e parece que um cenário bastante comum que deve haver uma solução, mas eu não estou tendo nenhuma sorte com a terminologia correta para obter um resultado útil Google.

Eu quero fazer isso:

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

Com o efeito que uma nova Client é criado com user_id = u.id.

Posso obter as agradáveis ??finders dinâmicos através de uma relação has_many? Se não, por quê?

Graças :)

Foi útil?

Solução 2

Este é inteiramente possível, usando a sintaxe exata que eu usei - você só precisa ser capaz de soletrar

Outras dicas

Este

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

funciona se você tiver has_many relacionamento set. No entanto, ele não vai aumentar erro de validação se você tiver quaisquer validações definidas em seu objeto Cliente e vai falhar silenciosamente se a validação falhar.

Você pode verificar a saída em seu console quando você faz

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>

eo user_id será definido, mas não o id do cliente porque a validação falhou eo cliente não é criado

Portanto, este deve criar o cliente só se você passar todos os atributos necessários de objeto cliente e a validação para o objeto cliente passou com sucesso.

Então, digamos que seu modelo cliente tem de validação em nome bem além do e-mail, então você deve fazer

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">
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top