我的模型Foo
的属性为id, name, location
。
我有一个Foo
的实例:
f1 = Foo.new
f1.name = "Bar"
f1.location = "Foo York"
f1.save
我想复制f1
并从该副本中创建Foo
模型的另一个实例,但我不希望f1.id
转移到f2.id
(我不想明确地指定它,我希望数据库处理它,因为它应该)。
除了手动复制每个属性外,还有一种简单的方法吗?任何内置函数或写一个函数是最好的路径?
由于
答案 0 :(得分:70)
根据以下问题,如果您使用的是Rails> = 3.1,则可以使用object.dup
:
What is the easiest way to duplicate an activerecord record?
答案 1 :(得分:59)
这是ActiveRecord::Base#clone方法的用途:
@bar = @foo.clone
@bar.save
答案 2 :(得分:2)
错误这样做的方法是:
f2 = Foo.new( f1.attributes ) # wrong!
f2.save # wrong!
或在一行中,但仍错误:
f2 = Foo.create( f1.attributes ) # wrong!
详见评论
答案 3 :(得分:0)
您可以在
这样的轨道中进行重复记录@bar = @foo.dup
@bar.save!
答案 4 :(得分:-2)
您可以使用rails提供的内置attributes
方法。 E.g。
f2 = Foo.new(f1.attributes)
或
f2 = Foo.new
f2.attributes = f1.attributes