Carriles: guardar un registro a través de belongs_to y el establecimiento de la clave externa
-
21-09-2019 - |
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.
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.