Rails: salve um registro via pertences_to e definindo a chave estrangeira
-
21-09-2019 - |
Pergunta
Existe uma maneira melhor de escrever este código? Simplesmente não está bem comigo, sinto que há algo realmente 'trilhos como' que eu já deveria saber:
belongs_to :parent_in_use
belongs_to :parent_template
def after_create
new_parent_in_use = ParentInUse.create!(self.parent_template.attributes)
self.update_attribute(:parent_in_use_id, new_parent_in_use.id)
end
Depois de criar um registro, estou pegando o modelo pai selecionado e criando um parent_in_use
registro com base nisso. Dessa forma, o modelo pode mudar e o registro in_use viverá com meu objeto para sempre. As classes ParentInuse e ParentTemplate herdam do pai usando o STI.
Tenho certeza de que isso deve ser simples o suficiente, mas não sei como fazê -lo, basicamente gostaria de criar e atribuir o registro em uma operação.
Solução
Isso fará o que você está procurando.
def after_create
self.parent_in_use = ParentInUse.create!(parent_template.attributes)
end
No entanto, sem outras mudanças, não fará nada. Como a chave estrangeira é armazenada no modelo atual, o ActiveRecord não salvará a alteração se essa associação for criada por uma chamada posterior. O novo objeto ParentInuse será salvo, mas a linha do banco de dados para o modelo atual não será atualizada com a correspondente parent_in_use_id.
Chame como uma chamada antes_Create de volta e as coisas correrem mais suavemente.