Tengo un formulario de inscripción.Rails 3: rollback for after_create
Cuando el usuario se inscribe, la aplicación debe guardar los datos en la tabla enrollments
y en la tabla users
. (Necesito esta separación porque el perfil del usuario puede cambiar pero los datos que ingresó para esa inscripción en particular deben ser archivados. De modo que aunque más tarde el usuario cambie su apellido, en el formulario de inscripción tendré su información inicial)
así que estaba pensando acerca de cómo guardar los datos en la tabla enrollments
luego tener una llamada after_create, así ...
class Enrollment < ActiveRecord::Base
after_create :save_corresponding_user
def save_corresponding_user
user = User.new
user.full_name = self.user_full_name
user.email = self.user_email
user.mobile_phone = self.user_mobile_phone
user.save
end
end
la cuestión es, ¿y si ahorrando al usuario falla por cualquier razón. ¿Cómo puedo deshacer y destruir los datos recién guardados de la tabla enrollments
?
Se puede inscribir a un usuario varias veces? Si no, simplemente agregaría los campos adicionales directamente en la tabla de usuarios. –
Bueno, en realidad, es un padre/tutor que matricula a un niño en una guardería. Entonces sí, el padre puede inscribir a un niño varias veces. – leonel
Para mí, parece que poner save_corresponding_user en after_create será un problema. ¿Qué sucede cuando el usuario se inscribe nuevamente? No querrá crear un nuevo objeto de usuario para ellos. Además, ¿no es probable que la tabla de inscripciones tenga una columna user_id? Eso no estaría poblado en su código anterior. Si fuera yo, simplemente envolvería la creación de la inscripción y el usuario en una transacción, que manejará el reinicio de ambos en caso de error. –