Carriles: guardar un registro a través de belongs_to y el establecimiento de la clave externa

StackOverflow https://stackoverflow.com/questions/1762653

Pregunta

¿Hay una mejor manera de escribir el código? Simplemente no se sienta bien conmigo, siento que hay algo de verdad 'como rieles' que ya debe 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

Después de crear un registro que estoy tomando la plantilla principal seleccionado y la creación de un registro parent_in_use basado en él. De esta manera la plantilla se puede cambiar y el registro en_uso van a vivir con mi objetivo siempre. Tanto las clases ParentInUse y ParentTemplate heredan de los padres utilizando las ITS.

Estoy seguro de que esto debería ser bastante simple, pero no sé cómo hacerlo, básicamente me gustaría crear y asignar el registro en una sola operación.

¿Fue útil?

Solución

Esto hará lo que usted está buscando.

def after_create 
  self.parent_in_use = ParentInUse.create!(parent_template.attributes)
end

Sin embargo, sin otros cambios que no le hará ningún bien. Debido a que la clave externa se almacena en el modelo actual, ActiveRecord no va a salvar el cambio si esta asociación es creada por una llamada after_create espalda. Se guardará el nuevo objeto ParentInUse, pero la fila de base de datos para el modelo actual no se actualizará con que parent_in_use_id correspondiente.

Llamada como una llamada before_create atrás y las cosas van a ir más suavemente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top