ruby / rails中的条件过程?

时间:2016-06-02 03:57:40

标签: ruby-on-rails ruby

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中可行的吗?

2 个答案:

答案 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。