Как создать рельсы 3 пользовательских исключения
Я создаю некоторые пользовательские исключения следующим образом
Библиотека/exceptions.rb
module Exceptions
class MemberOverFlow < StandardError
end
rescue_from MemberOverFlow do |exception|
redirect_to root_url, :alert => exception.message
end
end
Я использую для создания исключения, подобного этому.
raise Exception::MemberOverFlow"member count overflow"
Он дает следующую ошибку
NoMethodError in MembersController#create
undefined method `MemberOverFlow' for Exception:Class
может кто-нибудь сказать мне, что проблема
спасибо
Ответы
Ответ 1
Вам нужен модуль в контроллере, где вы пытаетесь создать исключение?
require "exception" #or wherever you have placed the module file
Использование:
raise Exception::MemberOverFlow.new("member count overflow")
и если он все еще не работает, попробуйте изменить имя модуля "Исключение", поскольку Exception - это существующий класс исключений, определенный в Ruby.
Ответ 2
Никто не специально выказал, что было неправильно в исходном посте. Следующее:
raise Exceptions::MemberOverFlow"member count overflow"
рассматривает MemberOverFlow
как МЕТОД, а не class
. Вам нужно вызвать метод new
в вашем классе MemberOverFlow
, что указывает на то, что указывает ответ amit_saxena.
Этот ответ решает проблему, но я просто чувствовал, что стоит указать, что вы делаете синтаксически, чтобы, если бы у вас была подобная проблема в будущем, вы бы знали, что происходит.
Ответ 3
Содержимое вашего каталога lib не загружается автоматически в rails 3, вам нужно указать их так: config/application.rb:
config.autoload_paths += %W(#{config.root}/lib)
Возможно, вы этого не сделали?