簡體   English   中英

有條件的紅寶石/鐵軌加工?

[英]Conditional Proc in ruby/rails?

在我們的代碼中使用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內部。 這在紅寶石/鐵軌中可行嗎?

也許使用三元運算符可以幫助?

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!

重新創建您要處理的設置(一種):

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') : [] }

買者自負。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM