如何在更新的Rails上通过readonly替换find?

我的项目中有这个遗留代码:

Model.find(id, :readonly => false) 

显然,它通过id搜索,只搜索非readonly的对象。 但readonly不是Model的属性,这应该是检查实际的ActiveRecord属性,该属性定义该实例是否是只读实例。 我不知道这个代码实际上是做什么的,也许是:readonly => false在那里没用。 但是我得到了预期的警告:

 DEPRECATION WARNING: Passing options to #find is deprecated. Please build a scope and then call #find on it. 

我无法用where替换它,因为我无法在SQL中检查readonlyness,因为它不是SQL属性。

该错误实际上明确指出,如果在范围内,我仍然可以使用find。 但我做了一个范围,如下:

 scope :by_id_not_readonly, ->(id) { find(id, :readonly => false) } 

但抛出相同的警告,但在模型中的范围声明行而不是控制器…

我做了一些其他测试:

将其替换为where(’id =?AND readonly = false’,id)实际上会产生错误,因为例外 – readonly不适合模型。

在没有readonly位的情况下运行代码会破坏测试,因为它返回只读记录,稍后代码会尝试更新它们,从而产生错误。

向查找散列添加不正确的选项,例如find(id,:readonly => false,:ldisfs32j9fmdf90sdfds => false)会产生未知密钥错误,例外情况。

所以,这个:readonly位是至关重要的,但我无法用简单的地方替换它。 如何在较新版本的rails中执行此操作?

试试这个:

  Model.readonly(false).find(id) 

它不是在哪里使用