2010-10-21 17 views
176

helper_method es sencillo: hace que algunos o todos los métodos del controlador estén disponibles para la vista.¿Qué hacen helper y helper_method?

¿Qué es helper? ¿Es al revés, es decir, importa los métodos auxiliares en un archivo o módulo? (Tal vez el nombre helper y helper_method iguales. Pueden más bien en lugar ser share_methods_with_view y import_methods_from_view)

reference

Respuesta

263

El método helper_method es compartir explícitamente algunos métodos definidos en el controlador para que estén disponibles para la vista. Esto se usa para cualquier método al que necesite acceder tanto desde controladores como desde helpers/views (los métodos de ayuda estándar no están disponibles en los controladores). p.ej. caso de uso común:

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

el método helper por otro lado, es para la importación de un ayudante entero a las vistas proporcionadas por el controlador (y es controladores hereditaria). Lo que esto significa es hacer

# application_controller.rb 
helper :all 

para los carriles> 3,1

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

hace que todos los módulos auxiliares disponibles a todos los puntos de vista (al menos para todos los controladores que hereda de application_controller.

# home_controller.rb 
helper UserHelper 

hace que el Métodos de UserHelper disponibles para vistas para acciones del controlador doméstico. Esto es equivalente a hacerlo:

# HomeHelper 
include UserHelper 
+20

En Rails> = 3.1, 'helper: all' en el controlador de la aplicación se reemplaza por la configuración 'include_all_helpers' en application.rb. Ver http://stackoverflow.com/questions/1179865/. –

+0

@Jeremy Sé que esta publicación es antigua, pero está bien dicha. ¡Me ayudó! –

+1

Hay una diferencia entre usar "ayuda" e "incluir" más allá de un simple azúcar sintáctico. "helper" hace que el módulo nombrado esté disponible para las vistas y solo para las vistas. "incluir" hace que el módulo nombrado esté disponible para las vistas y los controladores. Ambos impactan controladores heredados y sus puntos de vista. –

Cuestiones relacionadas