¿Cuándo se guardan los objetos de Registro Activo en muchas relaciones?
Estoy usando Rails 1.2.3 (sí, lo sé) y estoy confundido acerca de cómohas_many
Trabaja con respecto a la persistencia de objetos.
Por ejemplo, usaré esto como mi declaración:
class User < ActiveRecord::Base
has_many :assignments
end
class Assignment < ActiveRecord::Base
belongs_to :user
end
Como yo lo entiendo, esto genera, entre otros, un método.User#assignments.build
, lo que crea unAssignment
objeto cuyouser_id
es la instancia receptoraid
(y cuyos otros campos son los especificados en el argumento), pero no guarda este objeto en la base de datos. El objeto se puede guardar más tarde llamandoAssignment#save!
.
Sin embargo, los programadores pragmáticosDesarrollo web ágil con rieles, segunda edición, que he estado usando como tutorial y referencia, dice:
Si el objeto principal existe en la base de datos, al agregar un objeto secundario a una colección se guarda automáticamente ese elemento secundario.
Parece que hay una contradicción aquí. Lo que me gustaría saber es:
Si lo hagosome_user.assignments.build
, es elAssignment
objeto guardado?Si lo hagosome_user.assignments << Assignment.new
, es elAssignment
objeto guardado?Si lo hagosome_user.assignments << Assignment.create
, ¿se hacen dos llamadas a la base de datos, o solo una? ¿Qué pasa si modifico elAssignment
objeto entre crearlo y agregarlo asome_user.assignments
?Que pasa si yosave!
unAssignment
objeto cuyo correspondienteUser
¿Todavía no se ha guardado en la base de datos?PD La razón por la que no solo usoUser#assignments.create
porque todo es porque no me permite agrupar la inicialización a un método externo, lo que me gustaría poder hacer. Tampoco quiero hacer varios viajes a la base de datos.