我想做一个ActiveRecord对象的副本,改变进程中的一个字段(除了id)。要做到这一点,最简单的方法是什么?
我意识到我可以创建一个新记录,然后遍历每个字段,逐字段复制数据—但我认为一定有更简单的方法来做到这一点。
也许是这样的:
new_record = Record.copy(:id)
我想做一个ActiveRecord对象的副本,改变进程中的一个字段(除了id)。要做到这一点,最简单的方法是什么?
我意识到我可以创建一个新记录,然后遍历每个字段,逐字段复制数据—但我认为一定有更简单的方法来做到这一点。
也许是这样的:
new_record = Record.copy(:id)
当前回答
在Rails 5中,您可以像这样简单地创建重复的对象或记录。
new_user = old_user.dup
其他回答
如果你不想复制id,使用ActiveRecord::Base#dup
简单的方法是:
#your rails >= 3.1 (i was done it with Rails 5.0.0.1)
o = Model.find(id)
# (Range).each do |item|
(1..109).each do |item|
new_record = o.dup
new_record.save
end
Or
# if your rails < 3.1
o = Model.find(id)
(1..109).each do |item|
new_record = o.clone
new_record.save
end
试试rails的dup方法:
new_record = old_record.dup.save
在Rails 5中,您可以像这样简单地创建重复的对象或记录。
new_user = old_user.dup
如果你需要一个有关联的深度拷贝,我推荐deep_cloneable gem。