0

ActionController :: Base 클래스에 대해 상속 된 메서드를 구현하려고합니다. 내 목적은 ActionController :: Base에서 상속받은 클래스의 메소드를 ApplicationController와 같이 호출하여 특정 모듈을 포함하도록하는 것이다. 는 momement에서 내 코드는 다음과 같습니다레일즈 2.3.11에서 ActionController :: Base 클래스에 상속 된 후크를 정의 할 수 있습니까?

module MyModule 
def inherited(child) 
end 
def my_test_method() 
end 
end 
ActionController::Base.send(:extend, MyModule) 

ActionController::Base.methods.include? 'my_test_method' 
=> true 
ActionController::Base.methods.include? 'inherited' 
=> false 

코드는 플러그인의 init 파일에서라고합니다.

답변

0

상속 된 클래스의 클래스 메서드입니다. 자식 클래스가 정의 될 때 동작을 추가하기 위해 직접 덮어 쓸 수 있습니다. 나는 모듈을 확장하여이 작업을 수행 할 수있는 방법이 표시되지 않습니다,하지만이 같은 결과를 달성해야합니다

class ActionController::Base 
    def self.inherited(child) 
    puts "child created: #{child}" 
    end 
end 

class ChildClass < ActionController::Base 
end 

을 당신은 출력을 얻을 것이다 : 내가 늘어나는만큼,

child created: ChildClass 
+0

안녕하세요 론을 클래스에 classmethod를 추가하여 모듈로 확장 할 수 있다는 것을 알고 있습니다. 내 예제에 따르면 'my_test_method'의 경우 작동합니다. 그런데 왜 상속 된 메서드로 작동하지 않습니까? ActiveRecord :: Base와 같은 다른 클래스에서 시도해 보았습니다. –

+0

필자는 왜 덮어 쓰기가 작동하고 확장하는지 알지 못합니다. – L0ne