Tengo un modelo Foo
con atributos id, name, location
. Tengo una instancia de Foo
:
f1 = Foo.new f1.name = "Bar" f1.location = "Foo York" f1.save
Me gustaría copiar f1
y, a partir de esa copia, crear otra instancia del modelo de Foo
, pero no quiero que f1.id
f2.id
a f2.id
(no quiero asignar explícitamente eso, quiero la db para manejarlo, como debe ser.
¿Hay una forma sencilla de hacerlo, aparte de copiar manualmente cada atributo? ¿Alguna de las funciones integradas o la de escribir sería la mejor ruta?
Gracias
Esto es para lo que es el método ActiveRecord :: Base # clone :
@bar = @foo.clone @bar.save
Según la siguiente pregunta, si está utilizando Rails> = 3.1, puede usar object.dup
:
¿Cuál es la forma más fácil de duplicar un registro de registro de activación?
Una forma incorrecta de hacer esto sería:
f2 = Foo.new( f1.attributes ) # wrong! f2.save # wrong!
o en una línea, pero todavía mal :
f2 = Foo.create( f1.attributes ) # wrong!
ver comentarios para detalles
Podría usar los métodos de attributes
incorporados que proporciona Rails. P.ej
f2 = Foo.new(f1.attributes)
o
f2 = Foo.new f2.attributes = f1.attributes