2012-03-07 10 views
28

Por ejemplo, he construido una cadena llamada "new_work_path", ahora quiero llamar a ese helper como método.¿Cómo se llaman dinámicamente las rutas de ayuda en los rieles?

He intentado send("new_work_path", vars) y llamé al mismo envío desde muchos objetos. Pero no creo haber encontrado el objeto correcto para llamar a estos ayudantes.

Para hacer object.send("new_work_path", vars), ¿qué objeto debería estar buscando?

He intentado buscar esto en línea por un tiempo pero no he podido encontrar nada. Si alguien puede iluminar algunas luces en este caso, ¡sería genial!

Gracias!

+3

métodos de ayuda sólo pueden ser llamados desde dentro de un contexto de vista, no es un modelo, si eso es lo que estamos tratando de hacer. ¿Puedes ser más específico sobre dónde intentas ejecutar esto? Una llamada estándar de 'envío' debería ser suficiente si tienes el contexto correcto. – tadman

+0

Estoy intentando ejecutar esto en application_helper donde una llamada de ayudante de ruta estándar funcionaría correctamente. – gtr32x

+3

¿Cuál es el error que está obteniendo, entonces? Puede publicar un ejemplo? Si la llamada 'new_work_path' funciona directamente, entonces' send (: new_work_path) 'debe ser equivalente. – tadman

Respuesta

34

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

+0

Funciona bien. Merece "la mejor respuesta" :) –

+1

Esto funciona bien. Supongamos que desea vincular un recurso anidado, puede escribir 'Rails.application.routes.url_helpers.send (" new _ # {@ model.class.name.downcase} _comment_url "," #{@model.class.name .downcase} _id ".to_sym => @model)', ya que necesita un 'model_id' primario. – Avishai

+0

Si está tratando de acceder a 'url_helpers' desde un' Rails :: Engine' montado, intente '" :: Engine ".constantize.routes.url_helpers.send (...) 'donde' 'es del' mount' line en su archivo 'routes.rb' – erroric

8

¡Malo, como sugirió @tadman, traté de usar send(:new_work_path, args) otra vez y funcionó! Debe haberlo escrito mal antes.

Antes de descubrir que enviar las obras de inmediato, había encontrado otra solución que también es de interés:

new_polymorphic_path(Work, args) 

que parece ofrecer un poco de azúcar sintáctica también.

+0

ruta_polimórfica es divertido, también puede hacer 'ruta_acceso_polimórfico (: foo)' o 'ruta_acceso_polimórfico (" barra ")' –

Cuestiones relacionadas