2017-09-14 1 views
1

J'essaie d'utiliser un rescue_from dans mon contrôleur qui est censé être abstrait. J'ai besoin d'attraper certaines erreurs personnalisées là-bas, donc j'essaie d'évaluer une chaîne avec un appel à une méthode dans rescue_from. Voici le code:Erreur de routage Méthode non définie pour le contrôleur: Classe

class Restream::MultipleDestinationsServicesController < Restream::BaseController 
    rescue_from "Exceptions::#{self.class_name}Error", 
    with: :show_error 
    def self.class_name; controller_name.classify.constantize; end 
end 

De cette façon, je reçois

Routing Error 
undefined method `class_name' for Restream::MultipleDestinationsServicesController:Class Did you mean? class_eval``` 

Je ne comprends pas bien ce qui se passe mal ici, et que ne peut comprendre ce que je fais mal.

Répondre

1

En Ruby, ce que vous écrivez à l'intérieur d'une classe sont des instructions qui sont exécutées une par une. "Exceptions::#{self.class_name}Error" est exécutée immédiatement, mais self.class_name n'est pas encore défini. Donc, changer l'ordre:

def self.class_name 
    controller_name.classify.constantize 
end 

rescue_from "Exceptions::#{self.class_name}Error", with: :show_error 
+0

Je vais essayer le matin, + 3GMT;) Et avant cela: auriez-vous déjà fait cela ou suggéré une autre façon de faire la même chose? – Ngoral

+0

Je ne fais que construire un contrôleur abstrait, puisque j'ai plusieurs tgen qui doivent se comporter de manière totalement similaire – Ngoral