2010-10-21 15 views
176

helper_method è semplice: rende disponibili alcuni o tutti i metodi del controller per la visualizzazione.Cosa fanno helper e helper_method?

Che cos'è helper? È il contrario, cioè importa i metodi di supporto in un file o in un modulo? (Forse il nome helper e helper_method sono uguali. Possono essere invece piuttosto share_methods_with_view e import_methods_from_view)

reference

risposta

263

Il metodo helper_method è quello di condividere in modo esplicito alcuni metodi definiti nel controller per renderli disponibili per la vista. Viene utilizzato per qualsiasi metodo che è necessario accedere da entrambi i controller e gli helper/view (i metodi di supporto standard non sono disponibili nei controller). per esempio. caso di utilizzo comune:

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

il metodo helper invece, è per importare un intero supporto per le viste fornite dal controller (e ereditato controller). Ciò significa sta facendo

# application_controller.rb 
helper :all 

Per 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 

rende tutti i moduli di supporto disponibili per tutte le viste (almeno per tutti i controller che eredita da application_controller.

# home_controller.rb 
helper UserHelper 

fa la Metodi UserHelper disponibili per le visualizzazioni per le azioni del controller di casa. Questo equivale a fare:

# HomeHelper 
include UserHelper 
+20

In Rails> = 3.1, "helper: all" nel controller dell'applicazione viene sostituito dall'impostazione di configurazione "include_all_helpers" in application.rb. Vedi http://stackoverflow.com/questions/1179865/. –

+0

@Jeremy So che questo post è vecchio, ma ben detto. Mi ha aiutato! –

+1

C'è una differenza tra l'uso di "helper" e "include" oltre ad un semplice zucchero sintattico. "helper" rende il modulo denominato disponibile per le viste e solo per le viste. "include" rende il modulo nominato disponibile per le viste e per i controller. Entrambi hanno impatto sui controller ereditati e sulle loro viste. –

Problemi correlati