在Rails中复制模型实例

时间:2009-08-11 19:55:33

标签: ruby-on-rails activerecord

我的模型Foo的属性为id, name, location。 我有一个Foo的实例:

f1 = Foo.new
f1.name = "Bar"
f1.location = "Foo York"
f1.save

我想复制f1并从该副本中创建Foo模型的另一个实例,但我不希望f1.id转移到f2.id (我不想明确地指定它,我希望数据库处理它,因为它应该)。

除了手动复制每个属性外,还有一种简单的方法吗?任何内置函数或写一个函数是最好的路径?

由于

5 个答案:

答案 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