O que helper e helper_method fazem?


201

helper_method é simples: torna alguns ou todos os métodos do controlador disponíveis para a visualização.

O que é helper? É o contrário, ou seja, importa métodos auxiliares para um arquivo ou módulo? (Talvez o nome helperehelper_method sejam parecidos. Eles podem preferir ser share_methods_with_viewe import_methods_from_view)

referência

Respostas:


295

O método helper_methodé compartilhar explicitamente alguns métodos definidos no controlador para torná-los disponíveis para a visualização. Isso é usado para qualquer método que você precise acessar dos controladores e dos auxiliares / visualizações (os métodos auxiliares padrão não estão disponíveis nos controladores). por exemplo, caso de uso comum:

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

o helpermétodo, por outro lado, é importar um auxiliar inteiro para as visualizações fornecidas pelo controlador (e seus controladores herdados). O que isso significa está fazendo

# application_controller.rb
helper :all

Para Rails> 3.1

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

disponibiliza todos os módulos auxiliares para todas as visualizações (pelo menos para todos os controladores herdados de application_controller.

# home_controller.rb
helper UserHelper

disponibiliza os métodos UserHelper para visualizações de ações do controlador doméstico. Isso é equivalente a fazer:

# HomeHelper
include UserHelper

20
No Rails> = 3.1, 'helper: all' no controlador de aplicativo é substituído pela configuração 'include_all_helpers' em application.rb. Consulte stackoverflow.com/questions/1179865 .
Jan Hettich

@ Jeremy Eu sei que este post é antigo, mas bem dito. Me ajudou!
Ryan Rebo

3
Há uma diferença entre usar "helper" e "include" além de um simples açúcar sintático. "helper" disponibiliza o módulo nomeado para visualizações e somente visualizações. "include" disponibiliza o módulo nomeado para visualizações e para os controladores. Ambos impactam os controladores herdados e seus pontos de vista.
Richard_G 25/05

@R_G Você notou que o último trecho include UserHelperestá no HomeHelpermódulo, e não no controlador? AFAIK, simplesmente incluir o módulo auxiliar no controlador não compartilhará os métodos com as visualizações.
Franklin Yu

O @FranklinYu, incluindo o módulo auxiliar no controlador, compartilhará os métodos com as visualizações, portanto, R_G está correto.
precisa
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.