目前正在保存中,我正在尝试检查记录是否属于特定的“范围”。这个“范围”实际上只是 .where 调用的一些保存参数。同样在这个“范围”中,我只检查对象的值,而不检查它与数据库中其他对象的关系,所以如果有意义的话,查询数据库总是会过度杀戮。
我只能想出以下解决方案
begin
result = self.class.where(scope).find(self.id)
rescue
result = false
end
这样做的问题是,即使我已经有了记录,我也必须查询数据库,而且我不仅要在保存之前运行它,还要在保存之后运行它来检查它的值和保存后的值,因为有如果尚未保存,则无法查询数据库以获取更新版本。
可能有很多这样的检查,所以我想避免必须做两次,也不必多次查询数据库,即使最终我只是通过 id 查找一些东西。
我能想到的唯一其他解决方案是拥有一种方法,该方法可以将 where 调用转换为在传递对象时返回布尔值的 proc。唯一的问题是翻译它必须如何使用正在使用的活动记录适配器,这似乎是一个完整的项目。那么有没有人知道一些方法可以做到这一点,或者有帮助的宝石?
PS我从缓存中获取“范围”,所以我不能将它保存为proc,因为你不能用Rails将procs放入缓存中。