Cra*_*ker 8 ruby activerecord clone ruby-on-rails
我有一个ActiveRecord模型对象Foo
; 它代表一个标准的数据库行.
我希望能够显示此对象的实例的修改版本.我想重用这个类本身,因为它已经拥有了我需要的所有钩子和方面.(例如:我已经有一个显示适当属性的视图).基本上我想克隆模型实例,修改它的一些属性,然后将它反馈给调用者(视图,测试等).
我不希望这些属性修改回到数据库中.但是,我确实希望id
在克隆版本中包含该属性,因为它更容易处理路由助手.因此,我计划调用ActiveRecord::Base.clone()
,手动设置克隆实例的ID,然后对新实例进行适当的属性更改.这让我很担心; 一个save()
在修改过的实例上,我的原始数据将被破坏.
所以,我正在寻找锁定新实例,这样它不会伤害任何其他东西.我已经计划调用freeze()
(基于这一理解,这可以防止对对象的进一步修改,尽管文档并不十分清楚).但是,我没有看到任何明显的方法来阻止save().
实现这一目标的最佳方法是什么?
Rey*_*ard 20
你可以使用ActiveRecord :: Base #readonly!
model = MyModel.find 1
model.readonly!
model.save!
Run Code Online (Sandbox Code Playgroud)
它会引发ActiveRecord :: ReadOnlyRecord
归档时间: |
|
查看次数: |
3544 次 |
最近记录: |