2010-04-19 55 views
4
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,例如,具有新ID的數據映射器克隆記錄

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

回答

7

clone是要給你一個對象副本,這是不是真的你想要的 - 你想只複製在數據庫中記錄,是否正確?我已經在過去DM做到了這一點的方法是,像這樣:

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

你也可以做一個行:

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

頭號人物,太感謝你了! – BouncePast 2010-05-04 13:56:41

+0

我也發現這個:http://kurtstephens.com/node/71 – 2013-08-18 03:45:05