2010-12-12 84 views
0

Je donne les résultats suivants:Rails resuce, ce qui rend l'information disponible dans le Rescue Switch

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 

Le problème que je vais avoir est ici que dans mon resuce, je besoin d'avoir accès à plusieurs des vars dans le début du bloc , alors j'essaie de les passer quand j'appelle RAISE. Cela ne semble pas fonctionner. De plus, ces variables sont réparties sur plusieurs relances, ce qui remplit vraiment la page.

Existe-t-il un moyen de rendre ces variables accessibles dans le resuce sans avoir à les définir dans l'augmentation?

Sinon, comment utiliser relance pour les passer à la rescousse? Les erreurs ci-dessus avec:

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 
           ^

Merci!

Répondre

1

Le mot clé rescue capture simplement l'objet d'erreur. Vous devez saisir ces valeurs dans un objet d'exception:

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 

MAIS C'est un abus de la gestion des erreurs. Il est généralement préférable d'utiliser begin et raise pour de vraies erreurs, des erreurs auxquelles vous ne vous attendez pas. MissingInfo ressemble à la gestion des entrées utilisateur. Vous pouvez vous attendre à ce que l'entrée de l'utilisateur comporte des données manquantes. Faites des vérifications normales pour cela. Essayez de penser au comportement que vous essayez vraiment de transmettre.

+0

Intéressant mais le message est défini en étant. donc le réglage avant la main est un problème non? – AnApprentice

+0

Aussi, NoMethodError (méthode non définie 'attr_accessible 'pour MailingJob :: MissingInfo: Class): – AnApprentice

+0

Également, essayé, MissingInfo AnApprentice