2010-12-12 4 views
0

Ich habe folgendes:Rails Resuce, Informationen zur Verfügung zu im Switch-Rettung

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 

Das Problem, das ich hier mit bin, dass in meinem resuce, ich brauche den Zugang zu einigen der Vars im Block beginnen Also versuche ich, sie zu übergeben, wenn ich RAISE anrufe. Das scheint nicht zu funktionieren. Außerdem sind diese Variablen in vielen Erhöhungen konsistent, so dass sie die Seite wirklich ausfüllen.

Gibt es eine Möglichkeit, diese Variablen in der Datei zugänglich zu machen, ohne sie in der Raise definieren zu müssen?

Wenn nicht, wie verwende ich raise, um sie zur Rettung zu übergeben? Die oben genannten Fehler mit:

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 
           ^

Vielen Dank!

Antwort

1

Das Schlüsselwort rescue erfasst nur das Fehlerobjekt. Sie müssen diese Werte innerhalb eines Ausnahmeobjekt erfassen:

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 

ABER Dies ist ein Missbrauch der Fehlerbehandlung. Es ist in der Regel besser zu beginnen und für echte Fehler zu erhöhen, Fehler, die Sie nicht erwarten. MissingInfo klingt wie Umgang mit Benutzereingaben. Sie können erwarten, dass Benutzereingaben fehlende Daten enthalten. Machen Sie normale Überprüfungen dafür. Versuchen Sie, an das Verhalten zu denken, das Sie wirklich vermitteln möchten.

+0

Interessant, aber die Nachricht ist definiert als. also ist es ein Problem, das vorher einzustellen, nein? – AnApprentice

+0

NoMethodError (undefinierte Methode 'attr_accessible 'für MailingJob :: MissingInfo: Class): – AnApprentice

+0

Auch versucht, MissingInfo AnApprentice

Verwandte Themen