2011-01-12 149 views
0

我有一個看起來像這樣捕獲錯誤在Ruby中

if not @user.verified? or @user.credit_card.expired? 
    # do stuff 
end 

問題出在哪裏了@user還沒有信用卡,因爲expired?將提高,因爲零值的異常的情況說明。

有沒有一種簡潔的方式來捕捉錯誤內聯,而不必訴諸額外的if語句?

+0

首先檢查空嗎?即ie if user.credit_card.exists? – zengr 2011-01-12 08:19:28

回答

1

爲了避免這種例外,您可以使用Rails的2.3/3內置的方法:try

if not @user.verified? or @user.credit_card.try(:expired?) 
    # do stuff 
end 
0

andand當且僅當對象不爲空時,gem允許保護方法調用。

您的代碼段是這樣的:

if not @user.verified? or @user.credit_card.andand.expired? 
    # do stuff 
end 

你可以用gem install andand安裝它,你是好去。

網站:http://andand.rubyforge.org/

0

代碼

@user.credit_card.expired? 

將被稱爲違反Law of Demeter。該法律規定您可以在@user上撥打任何您喜歡的方式,但不能撥打@user.credit_card