数据映射器复制记录并生成新ID

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呢?
# => <Item @id=2 @title="Title 1" ...
1个回答

7

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

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

您也可以在一行中完成它:
Item.create(item.attributes.merge(:id => nil))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接