Ruby on rails Rails Resuce,在道岔救援中提供信息

Ruby on rails Rails Resuce,在道岔救援中提供信息,ruby-on-rails,exception,ioexception,raise,Ruby On Rails,Exception,Ioexception,Raise,我有以下资料: class MailingJob < Struct.new(:mailing_id) class MissingInfo < ArgumentError; end def perform .... begin ...... raise MissingInfo, "Not found", message_all, @message_from if @message_reply.length == 0

我有以下资料:

class MailingJob < Struct.new(:mailing_id)

  class MissingInfo < ArgumentError; end

  def perform
   ....

    begin
      ......
          raise MissingInfo, "Not found", message_all, @message_from if @message_reply.length == 0
      ......    
    rescue MissingInfo => reason, message_all, message_from
      UserMailer.delay.incoming_mails_error_notification(reason, message_all, message_from)
    end

  end

谢谢大家!

营救关键字只捕获错误对象。您需要在异常对象中捕获这些值:

class MissingInfo < ArgumentError
   attr_accessor :messages
   def initialize(messages = {})
     self.messages = messages
   end
end

begin
  raise MissingInfo.new(:all => message_all, :from => message_from, :reason => reason)
rescue MissingInfo => missing_info
  puts missing_info.messages[:all]
end
class missingfomessage\u all,:from=>message\u from,:reason=>reason)
救援任务信息=>丢失信息
放置丢失的信息。消息[:全部]
结束

但这是错误处理的滥用。对于真正的错误,通常最好使用begin和raise,这些错误是您不期望的。MissingInfo听起来像是在处理用户输入。用户输入可能会丢失数据。做常规检查。试着想想你真正想要表达的行为。

有趣,但信息是在存在中定义的。因此,在手之前设置它是一个问题否?另外,NoMethodError(MailingJob::MissingInfo:Class的未定义方法'attr_accessible'):还有,Tryed,MissingInfoattr\u访问器,得到相同的未定义方法'attr\u accessible',对不起,我的错。回答了一个关于attr_的问题,在此之前几分钟可以访问…:)
class MissingInfo < ArgumentError
   attr_accessor :messages
   def initialize(messages = {})
     self.messages = messages
   end
end

begin
  raise MissingInfo.new(:all => message_all, :from => message_from, :reason => reason)
rescue MissingInfo => missing_info
  puts missing_info.messages[:all]
end