ruby-on-rails - 防止实例上的 ActiveRecord save()

标签 ruby-on-rails ruby activerecord clone

我有一个 ActiveRecord 模型对象 Foo;它代表一个标准的数据库行。

我希望能够显示该对象实例的修改版本。我想重用类本身,因为它已经具有我需要的所有 Hook 和方面。 (例如:我已经有一个显示适当属性的 View )。基本上我想克隆模型实例,修改它的一些属性,并将它反馈给调用者( View 、测试等)。

希望这些属性修改返回到数据库中。但是,我确实希望在克隆版本中包含 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

关于ruby-on-rails - 防止实例上的 ActiveRecord save(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2937014/

相关文章:

ruby-on-rails - Apache 和 Phusion Passenger 在失败的 Rails 应用程序上的模糊错误 - 如何解决这样一个非详细问题?

ruby-on-rails - ActiveRecord OR 查询哈希表示法

ruby-on-rails - 从帮助器规范中 stub 一个帮助器方法

ruby-on-rails - 是否可以只从 ActiveRecord 关联请求某些列?

ruby-on-rails - rails 4 : Create new records through has_many association

ruby-on-rails - rails : Different Controller behaviour depending on route

ruby-on-rails - 只为 ruby​​ 1.9.2 安装一个 gem?

javascript - 检查javascript的功能测试

ruby-on-rails - Rails - 参数数量错误(2 个代表 0..1)错误

ruby-on-rails - 使用 Ruby on Rails 将时间插入时间列