2010-05-26 12 views
7

alcune domande:Linee guida per chiamare i metodi del controller nei moduli helper?

  1. è possibile chiamare un metodo di controllo in un modulo helper (ad esempio, applicazione di supporto)?

  2. Se sì, in che modo l'helper gestisce il rendering delle visualizzazioni? Ignoralo?

  3. In quali casi si desidera chiamare un metodo di controllo da un helper? È una cattiva pratica?

  4. Hai qualche codice di esempio in cui stai chiamando i metodi del controller in helper?

risposta

10

Generalmente non si chiamano i metodi del controller dagli helper. Cioè: se intendi un metodo che raccoglie i dati e quindi esegue il rendering di una vista (qualsiasi altro metodo che deve essere chiamato probabilmente non dovrebbe essere in un controller). È decisamente una cattiva pratica e si interrompe MVC.

Tuttavia, è perfettamente possibile rendere disponibili i metodi di controllo nelle viste, un ottimo esempio è ad esempio il metodo current_user.

Per rendere un metodo controller disponibile nelle viste, come un metodo di supporto, basta fare

private 

def current_user 
    # do something sensible here 
    @current_user ||= session[:user] 
end 
helper_method :current_user 

Tale metodo è meglio definito nella sezione private, o potrebbe essere disponibile come un'azione (se si un jolly nel tuo routing).

0

Chiamare un controller da un helper viola il pattern MVC. IMO se hai bisogno di chiamare un controller da un helper di visualizzazione Rails (come application_helper), allora c'è qualcosa sul design che potrebbe essere migliorato. L'intenzione è che gli helper "aiutino" le visualizzazioni e quindi parlino solo con modelli.

Non ho intenzione di difendere MVC stesso qui (ci sono un sacco di riferimenti sul web), ma questo thread SO su come chiamare il controller da una vista dovrebbe iniziare.

Calling controller from view? (nota, questo è un thread ASP.NET, quindi solo i principi di alto livello sono rilevanti).

+0

il thread che hai collegato riguarda ASP.NET quindi potrebbe non essere di grande aiuto. –

+0

Oops. Avrei giurato di aver visto una domanda di Rails relativamente recente su quelle linee, ma ovviamente non lo è. Immagino che il punto sia che l'helper della vista dovrebbe essere visto come parte della vista, e il pattern MVC aggrotta le sopracciglia quando chiama il controller dalla vista. Googling Rails MVC è un esercizio lasciato all'OP. – Greg

8

dichiarare il vostro metodi rispetto al corrispondente regolatore

private 
def method_name1 
... 
end 

def method_name2 
... 
end 

Nella testa del controllore dichiarare

helper_method :method_name1, :method_name2 

Si consiglia di dichiarare quei metodi in stato privato

E questo è tutto, ora puoi usare il tuo metodo su un helper

Problemi correlati