2014-11-26 4 views
0

그래서 alias_method를 수행하려고합니다 : 예외가 발생하면 내 컨트롤러에 포함 된 모듈 내에서 rescue_action_in_public하지만 FooController에서 "정의되지 않은 메소드`rescue_action_in_public'을 계속 가져옵니다. ".레일 4, 정의되지 않은 메서드`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 

, 나는 방금 전화 rescue_action_in_public받을 만 raise 'FooException'을하는 메소드를 호출 내 컨트롤러에 before_filter 있습니다. 그 외에도이 모듈을 포함하여 관련된 컨트롤러 코드입니다.

저는 이것이 실제로 어떻게 작동하는지 이해하려고 노력했습니다. 이 방법을 사용하는 방법은 예외가 발생할 때 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에서는 제거되었습니다.

레일 4의 가장 유사한 기능은 아마도 rescue_from이지만 모든 예외 사항이 아닌 특정 예외 사항을 해결할 예정입니다.