Как создать рельсы 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)

Возможно, вы этого не сделали?