【发布时间】:2011-08-12 21:33:04
【问题描述】:
我有一个模型。我想克隆它。 但是在我运行model.save之后!我的 before_create 回调没有被触发。 所以,我想知道让rails认为这个克隆对象实际上是新对象是否有一些技巧。
谢谢
【问题讨论】:
标签: ruby-on-rails activerecord ruby-on-rails-3.1
我有一个模型。我想克隆它。 但是在我运行model.save之后!我的 before_create 回调没有被触发。 所以,我想知道让rails认为这个克隆对象实际上是新对象是否有一些技巧。
谢谢
【问题讨论】:
标签: ruby-on-rails activerecord ruby-on-rails-3.1
这是 Rails 3.1 中的预期行为。在活动记录上CHANGELOG:
调用 ActiveRecord::Base#clone 将产生一个浅拷贝 记录,包括复制冻结状态。不会有回调 调用。
您可以使用dup。它将运行before_create 回调。
【讨论】:
clone 的测试,当我切换到 Rails 3.1.0 时,我在调用 save 时得到的症状是 SQLite3::ConstraintException: constraint failed,由于重复的“id”属性。按照@htanata 的建议更改为dup 已修复;谢谢!