【发布时间】:2011-02-25 14:12:59
【问题描述】:
我有一个 ActiveRecord 模型对象Foo;它代表一个标准的数据库行。
我希望能够显示此对象实例的修改版本。我想重用这个类本身,因为它已经拥有我需要的所有钩子和方面。 (例如:我已经有一个显示适当属性的视图)。基本上我想克隆模型实例,修改它的一些属性,并将其反馈给调用者(视图、测试等)。
我确实不希望这些属性修改返回到数据库中。但是,我确实想在克隆版本中包含 id 属性,因为它可以更轻松地处理路由助手。因此,我计划调用ActiveRecord::Base.clone(),手动设置克隆实例的ID,然后对新实例进行适当的属性更改。这让我很担心;修改后的实例上有一个save(),我的原始数据将被破坏。
所以,我希望锁定新实例,以免它伤害到其他任何东西。我已经计划打电话给freeze()(虽然documentation isn't terribly clear,但这会阻止对对象的进一步修改)。但是,我没有看到任何明显的方法来阻止 save()。
实现这一目标的最佳方法是什么?
【问题讨论】:
-
如果你需要用标准的 ActiveRecord 对象来解决这个问题,可能有更好的方法来解决这个问题。
-
我当然愿意接受替代品
标签: ruby-on-rails ruby activerecord clone