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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top