Proc在我们的代码中用于选择记录。这是一个例子:
Proc.new { models.where('payment_requestx_payment_requests.paid = ?', params[:paid_s] == 'true')}
如果满足简单条件,我们正在寻找运行此Proc
的方法。否则,如果条件返回false,则跳过Proc
。类似的东西:
Proc.new { models.where('payment_requestx_payment_requests.paid = ?', params[:paid_s] == 'true') if params[:condition] == 'true' }
条件必须在Proc
内。这是ruby / rails中可行的吗?
答案 0 :(得分:1)
也许使用三元运算符可以提供帮助吗?
p = Proc.new {condition ? puts('condition is true!') : puts('condition is false!')}
condition = false
p.call
>> condition is false!
condition = true
p.call
>> condition is true!
答案 1 :(得分:1)
重新创建您正在处理的设置(某种程度):
p = Proc.new { [{a:1}, {b:2}] }
p.call
=> [{:a=>1}, {:b=>2}]
带有if语句:
p = Proc.new { [{a:1},{b:2}] if false }
p.call
=> nil
如果没有记录满足where条件,则活动记录返回一个空数组,所以我认为这是你需要提供的:
p = Proc.new { false ? [{a:1},{b:2}] : [] }
p.call
=> []
或者在你的情况下:
Proc.new { params[:condition] == 'true' ? models.where('payment_requestx_payment_requests.paid = ?', params[:paid_s] == 'true') : [] }
警告Emptor。