2014-11-26 2 views
0

Итак, я пытаюсь выполнить alias_method: rescue_action_in_public в модуле, включенном в мой контроллер, когда возникает исключение, но я продолжаю получать« неопределенный метод `rescue_action_in_public» от FooController ».Rails 4, undefined method `rescue_action_in_public '

Это мой модуль:

module DoSomethingToExceptions 
    extend ActiveSupport::Concern 

    included do 
    alias_method :rescue_action_in_public_with_some_extra_thing, :rescue_action_in_public 
    alias_method :rescue_action_in_public, :rescue_action_in_public_without_some_extra_thing 
    end 

    def rescue_action_in_public_with_some_extra_thing 
    do_something 
    rescue_action_in_public_without_some_extra_thing 
    end 
end 

Для тестирования этого, у меня есть в моем контроллере before_filter, который вызывает метод, который делает только raise 'FooException', только чтобы получить rescue_action_in_public называется. Кроме того, включая этот модуль, это соответствующий код контроллера.

Я действительно пытался понять, как это должно работать. То, как я предполагал, что это сработает, - rescue_action_in_public получает вызов «из рельсов», когда возникает исключение, и поскольку я затем накладываю этот метод, вместо этого вызывается мой метод псевдонима, делая то, что я хочу добавить к этому процессу , а затем я говорю, чтобы он сделал rescue_action_in_public_without_some_extra_thing, который затем был сфальсифицирован до исходного rescue_action_in_public, поэтому процесс нативных рельсов затем должен продолжаться.

Что я делаю неправильно?

ответ

0

rescue_action_in_public больше не является частью Rails API. На основе http://apidock.com/rails/ActionController/Rescue/rescue_action_in_public он существовал в Rails 1.x и 2.x, но был удален в Rails 3.0.

Ближайший эквивалент в Rails 4, вероятно, rescue_from, но он предназначен для спасения от определенных исключений, а не для всех исключений.