Скопируйте экземпляры модели в 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
Другие вопросы по тегам