具有新ID的Datamapper克隆记录

时间:2010-04-19 17:41:28

标签: database clone duplicates datamapper records

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" ...

这确实按照描述“克隆”了对象,但是如何这样做,以便在保存记录后应用不同的ID,例如,

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

1 个答案:

答案 0 :(得分:7)

clone会给你一个对象副本,这不是你想要的 - 你只想复制数据库中的记录,对吗?我过去使用DM的方式是这样的:

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

您也可以在一行中完成:

Item.create(item.attributes.merge(:id => nil))