ruby-on-rails – 防止实例上的ActiveRecord save()
发布时间:2020-12-16 19:32:17 所属栏目:百科 来源:网络整理
导读:我有一个ActiveRecord模型对象Foo;它代表一个标准的数据库行. 我希望能够显示此对象的实例的修改版本.我想重用这个类本身,因为它已经拥有了所有的钩子和放大器.我需要的方面. (例如:我已经有一个显示适当属性的视图).基本上我想克隆模型实例,修改它的一些属
我有一个ActiveRecord模型对象Foo;它代表一个标准的数据库行.
我希望能够显示此对象的实例的修改版本.我想重用这个类本身,因为它已经拥有了所有的钩子和放大器.我需要的方面. (例如:我已经有一个显示适当属性的视图).基本上我想克隆模型实例,修改它的一些属性,然后将它反馈给调用者(视图,测试等). 我不希望这些属性修改回到数据库中.但是,我确实希望在克隆版本中包含id属性,因为它更容易处理路由助手.因此,我计划调用ActiveRecord :: Base.clone(),手动设置克隆实例的ID,然后对新实例进行适当的属性更改.这让我很担心;修改后的实例上有一个save(),我的原始数据将被破坏. 所以,我正在寻找锁定新实例,这样它就不会伤害其他任何东西.我已经计划调用freeze()(理解为这可以防止对对象的进一步修改,尽管是documentation isn’t terribly clear).但是,我没有看到任何明显的方法来阻止save(). 实现这一目标的最佳方法是什么? 解决方法
你可以使用
ActiveRecord::Base#readonly!
model = MyModel.find 1 model.readonly! model.save! 它会引发ActiveRecord :: ReadOnlyRecord (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |