我的陈述看起来像这样
if not @user.verified? or @user.credit_card.expired?
# do stuff
end
问题是@user
还没有信用卡,因为expired?
会因为零值而引发异常。
是否有一种简洁的方法可以在不必使用额外的if语句的情况下捕获内联错误?
答案 0 :(得分:1)
要避免此异常,您可以使用Rails 2.3 / 3内置方法:try
if not @user.verified? or @user.credit_card.try(:expired?)
# do stuff
end
答案 1 :(得分:0)
当且仅当对象不为null时,和 gem才允许进行受保护的方法调用。
您的代码段如下所示:
if not @user.verified? or @user.credit_card.andand.expired?
# do stuff
end
您可以使用gem install andand
进行安装,然后就可以了。
答案 2 :(得分:0)
代码
@user.credit_card.expired?
将被称为违反Law of Demeter。该法律规定,您可以在@user
上调用您喜欢的任何方法,但不能在@user.credit_card
上调用。