Ответ 1
Это то, что метод ActiveRecord:: Base # clone предназначен для:
@bar = @foo.clone
@bar.save
У меня есть модель Foo
с атрибутами id, name, location
.
У меня есть экземпляр Foo
:
f1 = Foo.new
f1.name = "Bar"
f1.location = "Foo York"
f1.save
Я хотел бы скопировать f1
и из этой копии создать другой экземпляр модели Foo
, но я не хочу, чтобы f1.id
переносился на f2.id
(я не хочу явно назначьте это, я хочу, чтобы db обрабатывал его, как и должно).
Есть ли простой способ сделать это, кроме ручного копирования каждого атрибута? Любые встроенные функции или написать один из них - лучший маршрут?
Спасибо
Это то, что метод ActiveRecord:: Base # clone предназначен для:
@bar = @foo.clone
@bar.save
В соответствии с следующим вопросом, если вы используете Rails >= 3.1, вы можете использовать object.dup
:
Каков самый простой способ дублирования записи activerecord?
a неправильный способ сделать это:
f2 = Foo.new( f1.attributes ) # wrong!
f2.save # wrong!
или в одной строке, но все же неверно:
f2 = Foo.create( f1.attributes ) # wrong!
Подробнее см. комментарии
Вы можете сделать дубликат записи в рельсах, как
@bar = @foo.dup
@bar.save!
Вы можете использовать встроенные методы attributes
, которые предоставляют рельсы. Например.
f2 = Foo.new(f1.attributes)
или
f2 = Foo.new
f2.attributes = f1.attributes