检查并分配给一个变量而不执行两次ruby

Check and assign to a variable without executing twice ruby

我想仅当计数优于特定值时才将查询 mongoid 中的值分配给变量。

如果我这样做

mdl = Mdl.by_params(params) unless Mdl.by_params(params) < limit

查询被执行了两次,如何用一次查询进行检查和赋值?

您必须从 Mongoid 检索数据才能进行比较。

mdl_temp = Mdl.by_params(params)
mdl = mdl_temp unless mdl_temp < limit

可能的解决方案取决于 md1 数据的类型。

通用解决方案:

((mdl = Mdl.by_params(params)) < limit) && md1 = nil

如果 md1mutatable 对象的实例,它响应 replace(例如 Hash):

Mdl.by_params(params).tap do |md| 
  md1.replace(md) unless CONDITION # md[:limit] < limit
end