如何从
中拯救未定义的方法
error in this code
for user in @users do
@customer = Stripe::Customer.retrieve(user.stripe_customer_token)
if @customer.subscription.nil?
elsif @customer.subscription.plan.id == 2
user.silver_reset
elsif @customer.subscription.plan.id == 3
user.gold_reset
end
end
我尝试过一次简单的救援电话,但是rake并不喜欢它。
从错误中拯救的方法是什么?
更新:
我这样做的方式
for user in @users do
@customer = Stripe::Customer.retrieve(user.stripe_customer_token)
rescue_from Exception => exception
# Logic
end
if @customer.subscription.nil?
elsif @customer.subscription.plan.id == 2
user.silver_reset
elsif @customer.subscription.plan.id == 3
user.gold_reset
end
end
错误 /home/user/rails_projects/assignitapp/lib/tasks/daily.rake:25:语法错误,意外的keyword_rescue,期待keyword_end 救援Exception =>例外
耙子0.9.2.2 Rails 3.2.5
答案 0 :(得分:4)
使用try
包装问题方法,如果不存在则返回nil。 E.g:
unless @customer = Stripe::Customer.try(:retrieve, user.stripe_customer_token)
# Logic
end
或者,这会导致更多错误:
unless @customer = Stripe::Customer.retrieve(user.stripe_customer_token) rescue nil
# Logic
end
或者这是你想要的更多:
@users.each do |user|
begin
@customer = Stripe::Customer.retrieve(user.stripe_customer_token)
rescue StandardError => error
# handle error
end
end
答案 1 :(得分:1)
我仍然没有足够的声誉来评论,但关于上述答案的第三个选项:不要从异常中抢救!
Exception
是Ruby异常层次结构的根,所以当你rescue Exception
拯救所有时,包括SyntaxError
,{{1}等子类}和LoadError
。
如果您想了解更多信息,请查看Why is it a bad style to `rescue Exception => e` in Ruby?