检查并分配给一个变量而不执行两次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
如果 md1
是 mutatable 对象的实例,它响应 replace
(例如 Hash
):
Mdl.by_params(params).tap do |md|
md1.replace(md) unless CONDITION # md[:limit] < limit
end
我想仅当计数优于特定值时才将查询 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
如果 md1
是 mutatable 对象的实例,它响应 replace
(例如 Hash
):
Mdl.by_params(params).tap do |md|
md1.replace(md) unless CONDITION # md[:limit] < limit
end