Datamapper Clone Record с новым идентификатором - PullRequest
4 голосов
/ 19 апреля 2010
class Item
    include DataMapper::Resource

    property :id, Serial
    property :title, String
end

item = Item.new(:title => 'Title 1') # :id => 1
item.save
item_clone = Item.first(:id => 1).clone
item_clone.save

# => <Item @id=1 @title="Title 1" ...

Это «клонирует» объект, как описано, но как это можно сделать, чтобы применить другой идентификатор после сохранения записи, например,

# => <Item @id=2 @title="Title 1" ...

1 Ответ

7 голосов
/ 30 апреля 2010

clone даст вам объектную копию, что на самом деле не то, что вам нужно - вы хотите просто дублировать запись в БД, правильно? То, как я делал это с DM в прошлом, выглядит так:

new_attributes = item.attributes
new_attributes.delete(:id)
Item.create(new_attributes)

Вы также можете сделать это в одну строку:

Item.create(item.attributes.merge(:id => nil))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...