2012-03-07 12 views
28

Ad esempio, ho creato una stringa chiamata "new_work_path", ora voglio chiamare quell'helper come metodo.Come chiamare dinamicamente l'helper dei percorsi nelle rotaie?

Ho provato send("new_work_path", vars) e chiamando lo stesso invio da molti oggetti. Ma non penso di aver trovato l'oggetto giusto per chiamare questi aiutanti.

Per fare object.send("new_work_path", vars), cosa oggetto dovrei cercare?

Ho provato a cercare questo in linea per un po 'ma non ho trovato nulla. Se qualcuno può illuminare alcune luci su questo, sarebbe fantastico!

Grazie!

+3

metodi di supporto possono essere chiamati solo all'interno di un contesto di vista, non un modello, se è questo che stai cercando di fare. Puoi essere più specifico su dove stai cercando di eseguire questo? Una chiamata 'send' standard dovrebbe essere sufficiente se si ha il contesto giusto. – tadman

+0

Sto provando ad eseguire ciò nel application_helper in cui una chiamata helper di route standard funzionerebbe correttamente. – gtr32x

+3

Qual è l'errore che stai ottenendo, allora? Puoi pubblicare un esempio? Se chiamare 'new_work_path' direttamente funziona, allora' send (: new_work_path) 'dovrebbe essere equivalente. – tadman

risposta

34

provare Rails.application.routes.url_helpers.send(...)

+0

Funziona bene. Merita "la migliore risposta" :) –

+1

Questo funziona bene. Supponiamo che tu voglia collegare a una risorsa nidificata, potresti scrivere 'Rails.application.routes.url_helpers.send (" new _ # {@ model.class.name.downcase} _comment_url "," #{@model.class.name .downcase} _id ".to_sym => @model)', dal momento che è necessario un genitore 'model_id'. – Avishai

+0

Se si sta tentando di accedere a 'url_helpers' da un' Rails :: Engine' montato, provare a '" :: Engine ".constantize.routes.url_helpers.send (...) 'dove' 'è dal' mount' line nel tuo file 'routes.rb'. – erroric

8

Il mio male, come suggerito da @tadman, ho provato a utilizzare nuovamente send(:new_work_path, args) e ha funzionato! Deve averlo digitato in modo errato prima.

prima di scoprire che inviano lavori subito, avevo trovato un'altra soluzione, che è anche di interesse:

new_polymorphic_path(Work, args) 

che sembra offrire un po 'di zucchero sintattico pure.

+0

polymorphic_path è divertente, puoi anche fare 'polymorphic_path (: foo)' o 'polymorphic_path (" bar ")' –

Problemi correlati