2011-05-27 19 views
15

estoy creando algunas excepciones personalizadas de la siguiente maneracómo crear carriles 3 excepciones personalizadas

lib/exceptions.rb

module Exceptions 
    class MemberOverFlow < StandardError 
    end 
    rescue_from MemberOverFlow do |exception| 
    redirect_to root_url, :alert => exception.message 
    end 
end 

que utilizo para aumentar la excepción de esta manera.

raise Exception::MemberOverFlow"member count overflow" 

Se da el siguiente error

NoMethodError in MembersController#create 

undefined method `MemberOverFlow' for Exception:Class 

puede alguien decirme cuál es el problema

gracias

+2

El nombre de su módulo es Excepciones y está utilizando 'Exception ::'. ¿Es eso un error tipográfico? –

Respuesta

11

¿requirió que el módulo en el controlador donde se está tratando de aumentar el ¿excepción?

require "exception" #or wherever you have placed the module file

Uso:
raise Exception::MemberOverFlow.new("member count overflow")

y si aún así no funciona, trate de cambiar el nombre de la "excepción" porque módulo de Excepción es una clase de excepción existente definido en Ruby.

+0

Al principio me perdí tu comentario sobre la pregunta original re. un posible error tipográfico Si no es un error tipográfico, porque su módulo se llama 'Exceptions' (plural), se debe llamar como' raise Exceptions :: MemberOverFlow.new ("member count overflow") '. Además, especifica que el nombre del archivo es 'lib/exceptions.rb', por lo que la instrucción require también debe ser plural:' require 'exceptions' '. –

5

El contenido de su directorio lib no se cargan automáticamente en los carriles 3, es necesario especificarlos como tal en config/application.rb:

config.autoload_paths += %W(#{config.root}/lib) 

Tal vez no lo han hecho?

7

Nadie llamó específicamente a lo que estaba mal en la publicación original. En el siguiente:

raise Exceptions::MemberOverFlow"member count overflow" 

es tratar MemberOverFlow como un método y no el class que es. Debe llamar al método new en su clase MemberOverFlow, que es lo que señala la respuesta de amit_saxena.

Esa respuesta resuelve el problema, pero sentí que valía la pena señalar lo que estaba haciendo sintácticamente para que, si alguna vez tuvieras un problema similar en el futuro, sabrías lo que estaba pasando.

Cuestiones relacionadas