2011-09-08 60 views
0

這裏的if/else語句:我該如何重構這個if/else語句?

if number.events.blank? 
    Resque.enqueue(ProcessNumbers, number.id) 
elsif number.events && !number.events.ordered.first.status.downcase.include? 'delivered' 
    Resque.enqueue(ProcessNumbers, number.id) 
end 

最後想說: 「如果number.events是空白的,運行enqueue或者如果number.events.ordered.first.status.downcase.include包括 '交付'(但要確保number.events居然有東西)。」

+1

我認爲'if/else'可以,因爲它是可以的,但是兩個分支完全相同有點奇怪。 –

+0

我想弄清楚如何將這些合併爲一個,我猜。 – Shpigford

+0

如果你想結合它們,它是'如果number.events.blank? || (number.events &&!number.events.ordered.first.status.downcase.include?'delivered')'。 –

回答

2

我不是一個Ruby開發者,但它似乎是你的number.events檢查在elsif是多餘的,因爲你的代碼將只的情況下「落空」到elsifnumber.events不是空白。而且因爲你有一個if...or的情況下,把它可能是一個更簡潔的方式:

if number.events.blank? || !number.events.ordered.first.status.downcase.include? 'delivered' 
    Resque.enqueue(ProcessNumbers,number.id) 
0

或者,

if !number.events.blank? && !number.events.ordered.first.status.downcase.include? 'delivered' 
    Resque.enqueue(ProcessNumbers, number.id) 

這將確保number.events實際上有一些東西。

+0

我不明白你是如何相信這段代碼實際上做同樣的事情?如果'number.events'爲空,那麼你的代碼根本就不會'入隊'。 – nathanvda