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

私がここで抱えている問題は、私のリソースでは、beginブロック内のいくつかの変数にアクセスする必要があるため、RAISEを呼び出すときにそれらを渡そうとしていることです。それは機能していないようです。また、これらの変数は多くのレイズで構成されているため、実際にページがいっぱいになります。

レイズで定義せずに、リソースでこれらの変数にアクセスできるようにする方法はありますか?

そうでない場合は、レイズを使用してそれらをレスキューに渡すにはどうすればよいですか?上記のエラー:

SyntaxError (/Users/xxxxx/Sites/xxxxxxx/lib/mailing_job.rb:117: syntax error, unexpected ',', expecting kTHEN or ':' or '\n' or ';'
    rescue MissingInfo => reason, message_all, message_from
                                 ^

ありがとうございました!

4

1 に答える 1

1

キーワードはrescue、エラー オブジェクトをキャプチャするだけです。これらの値を例外オブジェクト内にキャプチャする必要があります。

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

しかし、これはエラー処理の乱用です。通常、予期しない実際のエラーに対して begin と raise を使用することをお勧めします。MissingInfo は、ユーザー入力の処理のように聞こえます。ユーザー入力に欠落データがあることが予想されます。そのための通常のチェックを行います。あなたが本当に伝えようとしている行動を考えてみてください。

于 2010-12-12T21:26:15.980 に答える