У меня есть следующий метод в моей команде rake.Ruby каждый блок следующий, когда возникает ошибка или исключение
def call
orders = Spree::Order.complete.where('completed_at >= :last_day', last_day: Time.now - 30.days)
orders.each do |order|
order_tracking = order.shipments.first.tracking
next if order_tracking.nil?
shipment = order.shipments.first
results = fedex.track(tracking_number: order_tracking)
tracking_info = results.first
status = tracking_info.status.to_s
delivery_date = tracking_info.delivery_at
shipment.is_delivered = delivered?(status)
shipment.date_delivered = delivery_date
shipment.save
puts "-> Shipping status was updated for #{order.number}"
end
end
Если есть заказ, не отслеживая номером я Пропускаем с next
на линии 5.
Мой вопрос: Как бы я next
, если идентификационный номер является недействительным, и возникает следующее сообщение об ошибке:
Fedex::RateError: Invalid tracking number.
в идеале я хотел бы изменить строку 5 на:
next if order_tracking.nil? || order_tracking.raised(Fedex::RateError) # something like that
Спасибо заранее.
Также RateError поднята здесь:
def process_request
api_response = self.class.post(api_url, :body => build_xml)
puts api_response if @debug == true
response = parse_response(api_response)
if success?(response)
options = response[:track_reply][:track_details]
if response[:track_reply][:duplicate_waybill].downcase == 'true'
shipments = []
[options].flatten.map do |details|
options = {:tracking_number => @package_id, :uuid => details[:tracking_number_unique_identifier]}
shipments << Request::TrackingInformation.new(@credentials, options).process_request
end
shipments.flatten
else
[options].flatten.map do |details|
Fedex::TrackingInformation.new(details)
end
end
else
error_message = if response[:track_reply]
response[:track_reply][:notifications][:message]
else
"#{api_response["Fault"]["detail"]["fault"]["reason"]}\n--#{api_response["Fault"]["detail"]["fault"]["details"]["ValidationFailureDetail"]["message"].join("\n--")}"
end rescue $1
raise RateError, error_message
end
end
Я думаю, что вы будете нуждаться в 'начать \ rescue', чтобы справиться с этим, например 'Начать; ВАШ ТРЕБОВАНИЯ КОДА ЗДЕСЬ; спасение Fedex :: RateError => e; #maybe запишите ошибку; следующий; end' – engineersmnky
Не беспокойтесь, решил. спасибо за редактирование и помощь. – neo