2013-07-25 57 views
-1

是否可以爲簽出用戶而不觸發.consumer被調用爲nil錯誤?級聯Ruby邏輯?

if signed_in? && current_user.consumer 
    puts "Hello world" 
end 

對於大多數我的網站我有窩這類條件句,如:

if signed_in? 
    if current_user.consumer 
    end 
end 

...這看起來並不那麼糟糕,但是當你有很多其他的代碼上頁面時,它可以是一個麻煩..

我想去的地方signed_in? 評估聲明,如果屬實的第二個條件進行評估......但在一個單一的線。這可能嗎?

回答

1

是的! Ruby支持短路邏輯,所以你的第一個代碼塊將按照你想要的完成:如果signed_in?的計算結果爲false,那麼Ruby解釋器將是懶惰的,並且不會打擾評估其餘條件。

同樣,如果用戶沒有登錄,!signed_in? || current_user.banned?會短路,當它意識到!signed_in?true又懶得評價current_user.banned?