2012-01-27 38 views
5

Estoy buscando para crear una ruta llamada de una cadena y pasar un objeto en ellarutas con nombre de cadena con objeto

estoy Una representación parcial con un "recurso" local

decir. render :partial => "listing", :locals => {:resource => @resource}

dentro _listing.html.haml estoy usando el método self.send

self.send("#{resource.class.to_s.downcase}_path()") 

esto funciona bien y crea los recursos con nombre ruta decir. article_path()

pero esta ruta necesita un objeto pasado en la ruta es decir. article_path (artículo)

estoy tratando este

self.send("#{resource.class.to_s.downcase}_path("+resource+")") 

y obtener el error no se puede convertir en el artículo Cadena

alguna sugerencia?

+0

después de una gran cantidad de retoques que encontré la respuesta fue lo suficientemente simple. la solución era hacer que coma separó _listing.html.haml - resource_path = "# {} resource.class.to_s.downcase _PATH" = link_to resource.title, enviar (resource_path, recursos) Espero que esto ayude a cualquiera que tenga problemas con el mismo –

Respuesta

10

Usted debe pasar los argumentos de esta manera:

self.send("#{resource.class.to_s.downcase}_path", resource) 
+0

@Ben. No vi tu comentario, me alegro de que lo hayas descifrado. – Jef

+0

ambos estamos en lo cierto. gracias por los comentarios jef –

+0

Yo usaría lo siguiente en su lugar: 'self.send (" # {resource.class.to_s.underscore} _path ", resource)' Funcionará en caso de que tu clase sea más de una palabra p.ej 'FooBar -> foo_bar' – vansan

1

Se puede simplificar la respuesta de Jef (que no es necesario utilizar un recurso), así:

send("#{controller_name}_path") 
Cuestiones relacionadas