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