모든 Rails 도우미를 모든 뷰에서 항상 사용할 수있는 이유는 무엇입니까? 이것을 비활성화하는 방법이 있습니까?
다른 컨트롤러의보기에서 한 컨트롤러의 도우미 메서드에 액세스 할 수있는 이유는 무엇입니까? Rails를 해킹 / 패칭하지 않고 이것을 비활성화하는 방법이 있습니까?
@George Schreiber의 방법은 Rails 3.1에서 작동하지 않습니다. 코드가 크게 변경되었습니다.
그러나 이제 Rails 3.1에서이 기능을 비활성화하는 더 좋은 방법이 있습니다. config / application.rb에 다음 행을 추가하십시오.
config.action_controller.include_all_helpers = false
이렇게하면 ApplicationController가 모든 도우미를로드하지 못합니다 .
(관심있는 사람을 위해 여기에 기능이 생성 된 풀 요청이 있습니다 .)
대답은 Rails 버전에 따라 다릅니다.
레일> = 3.1
구성을 적용하려는 환경에서 include_all_helpers
구성을 false
로 변경하십시오 . 구성을 모든 환경에 적용하려면에서 변경하십시오 application.rb
.
config.action_controller.include_all_helpers = false
레일스 <3.1
다음 줄을 삭제하십시오. ApplicationController
helper :all
이런 식으로 각 컨트롤러는 자체 헬퍼를로드합니다.
Rails 3에서 actioncontroller/base.rb
(라인 224 주변) :
def self.inherited(klass)
super
klass.helper :all if klass.superclass == ActionController::Base
end
예,에서 클래스를 파생 시키면 ActionController::Base
모든 도우미가 포함됩니다.
이 문제를 해결하려면 컨트롤러 코드 시작 부분 에서 clear_helpers
( AbstractClass::Helpers
; included in ActionController::Base
)를 호출 하십시오. clear_helpers에 대한 소스 코드 주석 :
# Clears up all existing helpers in this class, only keeping the helper
# with the same name as this class.
예 :
class ApplicationController < ActionController::Base
clear_helpers
...
end
실제로 Rails 2 에서 ActionController :: Base의 기본 기능은 모든 헬퍼를 포함하는 것이 었습니다.
Changeset 6222 on 02/24/07 20:33:47 (3 years ago) by dhh : 항상 모든 도우미를 원한다는 기본 가정으로 설정합니다 (예, 예).
변화:
class ApplicationController < ActionController::Base
helper :all # include all helpers, all the time
end
Rails 3 베타 1부터는 더 이상 CHANGELOG에 명시된 경우가 아닙니다.
- ActionController :: Base는 이제 Rails의 기본 ApplicationController에 의존하는 대신 helper : all을 수행합니다. [DHH]
'IT story' 카테고리의 다른 글
C로 현재 시간 가져 오기 (0) | 2020.09.06 |
---|---|
CoffeeScript 정의되지 않음 (0) | 2020.09.06 |
Apache Kafka 대 Apache Storm (0) | 2020.09.06 |
GCC로 미리 컴파일 된 헤더 (0) | 2020.09.05 |
HTML5와 일치하는 두 개의 양식 필드를 요구할 수 있습니까? (0) | 2020.09.05 |