helper와 helper_method는 무엇을합니까?


201

helper_method 간단합니다 : 컨트롤러의 일부 또는 모든 메소드를 뷰에서 사용할 수있게합니다.

무엇입니까 helper? 다른 방법으로, 즉 도우미 메서드를 파일이나 모듈로 가져 오는가? (어쩌면 이름 helperhelper_method같을 수도 있습니다. 오히려 대신 share_methods_with_view및 일 수도 있습니다 import_methods_from_view)

참고

답변:


295

이 방법 helper_method은 컨트롤러에 정의 된 일부 방법을 명시 적으로 공유하여 뷰에 사용할 수 있도록합니다. 컨트롤러와 도우미 /보기에서 액세스해야하는 모든 방법에 사용됩니다 (컨트롤러에서는 표준 도우미 방법을 사용할 수 없음). 예 : 일반적인 사용 사례 :

#application_controller.rb
def current_user
  @current_user ||= User.find_by_id!(session[:user_id])
end
helper_method :current_user

helper반면에있어서, 상기 제어부에 의해 제공되는 뷰에 전체 헬퍼를 가져올 것이다 (그리고 컨트롤러 상속 것). 이것이 의미하는 것은

# application_controller.rb
helper :all

레일> 3.1

# application.rb
config.action_controller.include_all_helpers = true
# This is the default anyway, but worth knowing how to turn it off

모든 도우미 모듈을 모든 뷰에서 사용할 수있게합니다 (적어도 application_controller에서 상속되는 모든 컨트롤러에 대해).

# home_controller.rb
helper UserHelper

UserHelper 메소드를 홈 컨트롤러의 조치보기에 사용할 수있게합니다. 이것은 다음을 수행하는 것과 같습니다.

# HomeHelper
include UserHelper

20
Rails> = 3.1에서 애플리케이션 컨트롤러의 'helper : all'은 application.rb의 'include_all_helpers'구성 설정으로 대체됩니다. stackoverflow.com/questions/1179865를 참조하십시오 .
Jan Hettich

@ Jeeremy 나는이 게시물이 오래되었다는 것을 알고 있지만 잘 말했다. 나를 도와 주었다!
Ryan Rebo

3
간단한 문법적 설탕 외에 "도우미"와 "포함"을 사용하는 것에는 차이가 있습니다. "helper"는 명명 된 모듈을 뷰에서만 사용할 수있게합니다. "include"는 명명 된 모듈을보기 및 컨트롤러에서 사용할 수있게합니다. 둘 다 상속 된 컨트롤러와 해당 뷰에 영향을줍니다.
Richard_G

@R_G 마지막 스 니펫 include UserHelperHomeHelper컨트롤러 대신 모듈 에 있음을 알고 계셨습니까 ? 컨트롤러에 헬퍼 모듈을 포함시키는 AFAIK는 뷰와 메소드를 공유하지 않습니다.
Franklin Yu

컨트롤러에 도우미 모듈을 포함하는 @FranklinYu는 실제로 메소드를 뷰와 공유하므로 R_G가 정확합니다.
Magne
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.