Que font helper et helper_method?


201

helper_method est simple: il met certaines ou toutes les méthodes du contrôleur à la disposition de la vue.

Qu'est-ce que c'est helper? Est-ce l'inverse, c'est-à-dire qu'il importe des méthodes d'assistance dans un fichier ou un module? (Peut-être que le nom helperet helper_methodsont semblables. Ils peuvent plutôt être share_methods_with_viewet import_methods_from_view)

référence

Réponses:


295

La méthode helper_methodconsiste à partager explicitement certaines méthodes définies dans le contrôleur pour les rendre disponibles pour la vue. Ceci est utilisé pour toute méthode à laquelle vous devez accéder à partir des contrôleurs et des assistants / vues (les méthodes d'assistance standard ne sont pas disponibles dans les contrôleurs). Exemple d'utilisation courante:

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

la helperméthode, d'autre part, consiste à importer un assistant complet dans les vues fournies par le contrôleur (et ses contrôleurs hérités). Qu'est-ce que cela signifie

# application_controller.rb
helper :all

Pour les 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

rend tous les modules d'assistance disponibles pour toutes les vues (au moins pour tous les contrôleurs héritant de application_controller.

# home_controller.rb
helper UserHelper

rend les méthodes UserHelper disponibles aux vues pour les actions du contrôleur domestique. Cela revient à faire:

# HomeHelper
include UserHelper

20
Dans Rails> = 3.1, «helper: all» dans le contrôleur d'application est remplacé par le paramètre de configuration «include_all_helpers» dans application.rb. Voir stackoverflow.com/questions/1179865 .
Jan Hettich

@Jeremy Je sais que ce message est ancien, mais bien dit. M'a aidé!
Ryan Rebo

3
Il existe une différence entre l'utilisation de "helper" et "include" au-delà d'un simple sucre syntaxique. "helper" rend le module nommé accessible aux vues, et uniquement aux vues. "include" met le module nommé à la disposition des vues et des contrôleurs. Les deux impactent les contrôleurs hérités et leurs vues.
Richard_G

@R_G Avez-vous remarqué que le dernier extrait include UserHelperest dans le HomeHelpermodule, plutôt que dans le contrôleur? AFAIK, l'inclusion simple du module d'assistance dans le contrôleur ne partagera pas les méthodes avec les vues.
Franklin Yu

@FranklinYu incluant le module d'assistance dans le contrôleur partagera réellement les méthodes avec les vues, donc R_G est correct.
Magne
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.