Скопируйте экземпляры модели в Rails - PullRequest
39 голосов
/ 11 августа 2009

У меня есть модель Foo с атрибутами id, name, location. У меня есть экземпляр Foo:

f1 = Foo.new
f1.name = "Bar"
f1.location = "Foo York"
f1.save

Я хотел бы скопировать f1 и из этой копии создать еще один экземпляр модели Foo, но я не хочу, чтобы f1.id перенесен на f2.id (я не хочу явно назначьте это, я хочу, чтобы БД обработал это, как и должно).

Есть ли простой способ сделать это, кроме копирования каждого атрибута вручную? Какие-нибудь встроенные функции или написание одной будет лучшим маршрутом?

Спасибо

Ответы [ 5 ]

71 голосов
/ 26 октября 2011

Согласно следующему вопросу, если вы используете Rails> = 3.1, вы можете использовать object.dup:

Какой самый простой способ дублировать запись активной записи?

60 голосов
/ 12 августа 2009

Это то, для чего ActiveRecord :: Base # clone метод предназначен для:

@bar = @foo.clone

@bar.save
2 голосов
/ 12 августа 2009

a неправильно способ сделать это будет:

f2 = Foo.new( f1.attributes )     # wrong!
f2.save                           # wrong!

или в одну строку, но все равно неправильно :

f2 = Foo.create( f1.attributes )  # wrong!

подробности см. В комментариях

0 голосов
/ 24 января 2019

Вы можете сделать дубликат записи в рельсах как

@bar = @foo.dup
@bar.save!
0 голосов
/ 12 августа 2009

Вы можете использовать встроенные attributes методы, которые предоставляет rails. Э.Г.

f2 = Foo.new(f1.attributes)

или

f2 = Foo.new
f2.attributes = f1.attributes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...