복붙노트

[RUBY-ON-RAILS] 왜 모든 레일 헬퍼 모두가, 모든 뷰에 사용할 수있는 시간인가? 이 해제하는 방법이 있나요?

RUBY-ON-RAILS

왜 모든 레일 헬퍼 모두가, 모든 뷰에 사용할 수있는 시간인가? 이 해제하는 방법이 있나요?

이유는 다른 컨트롤러의 뷰에서 하나의 컨트롤러를위한 도우미 메서드에 액세스 할 수 있습니까? 해킹 / 레일을 패치하지 않고 비활성화 할 수있는 방법이 있나요?

해결법

  1. ==============================

    1.@George 슈라이버의 방법은 레일 3.1대로 작동하지 않습니다; 코드는 크게 변경되었습니다.

    @George 슈라이버의 방법은 레일 3.1대로 작동하지 않습니다; 코드는 크게 변경되었습니다.

    그러나 지금은 레일 3.1 (잘하면 이상)에서이 기능을 해제 할 수있는 더 나은 방법이 있습니다. 당신의 설정 / application.rb,이 줄을 추가합니다 :

    config.action_controller.include_all_helpers = false
    

    이것은 헬퍼의 모든로드에서와 ApplicationController을 방지 할 수 있습니다.

    (관심이 누군가를 위해, 여기에 기능이 생성 된 풀 요구입니다.)

  2. ==============================

    2.대답은 레일 버전에 따라 다릅니다.

    대답은 레일 버전에 따라 다릅니다.

    구성을 적용 할 모든 환경에서 false로 config에게 include_all_helpers을 변경합니다. 당신이 설정이 모든 환경에 적용 할 경우, application.rb에서 변경.

    config.action_controller.include_all_helpers = false
    

    때 거짓, 그것을 포함을 건너 뜁니다.

    와 ApplicationController에서 다음 줄을 삭제

    helper :all
    

    이러한 방법으로 각각의 컨트롤러는 자신의 헬퍼를로드합니다.

  3. ==============================

    3.에서는 레일 (라인 224 정도) 3 actioncontroller / base.rb :

    에서는 레일 (라인 224 정도) 3 actioncontroller / base.rb :

    def self.inherited(klass)
      super
      klass.helper :all if klass.superclass == ActionController::Base
    end
    

    당신이 ActionController :: 자료에서 클래스를 파생하는 경우 그래서 그래, 모든 헬퍼가 포함됩니다.

    이 주위에 와서, 전화 clear_helpers (AbstractClass :: 도우미, ActionController :: 자료에 포함) 컨트롤러의 코드의 시작 부분에. 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
    
  4. ==============================

    4.실제로 레일 2, ActionController :: 자료의 기본 기능은 모든 헬퍼를 포함하는 것이었다.

    실제로 레일 2, ActionController :: 자료의 기본 기능은 모든 헬퍼를 포함하는 것이었다.

    DHH에 의해 02/24/07 20시 33분 47초에 변경 집합 6222 (3 년 전) : 그것은 당신이 모든 헬퍼, 모든 시간을 원하는 기본 가정을 확인 (예, 예)

    변화:

    class ApplicationController < ActionController::Base 
      helper :all # include all helpers, all the time 
    end 
    

    레일 같이 3 베타 1, 즉 변경 로그에서 언급 된 경우가 더 이상 없음

  5. from https://stackoverflow.com/questions/1179865/why-are-all-rails-helpers-available-to-all-views-all-the-time-is-there-a-way-t by cc-by-sa and MIT license