2011-01-12 115 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