2012-05-02 19 views
9

estoy en movimiento un proyecto de carriles de 3.1 a 3.2.2 carriles y tengo esto:: formato en el link_to no funciona en los carriles 3.2.2

= link_to 'CSV', :action => 'list', :search => @search, :format => 'csv' 

En los carriles de 3.1 Especifica el formato en el enlace html (format = csv) y es capturado por un respon_with, pero en 3.2.2 el formato nunca llega al enlace. Revisé la lista de commits en github y no puedo encontrar nada que se relacione con esto.

Editar:

Parece que este es un problema con url_for

#rails 3.1 
url_for :controller=>'posts', :action=>'index', :format=>:xml 
/admin/posts/index?format=xml 

#rails 3.2.2 
url_for :controller=>'posts', :action=>'index', :format=>:xml 
/admin/posts/index 

#rails 3.2.2 
url_for :controller=>'posts', :action=>'index', :format=>:xml, :id => 5 
/admin/posts/index/5.xml 
+0

¿Alguna vez lo solucionó? Estoy experimentando lo mismo. Solo con rutas con nombre podría hacer algo como '<% = link_to" something ", something_path (something,: format =>: xml)%>' – slhck

+0

Sí, terminé usando un hack similar al que tienes. No recuerdo exactamente, pero creo que coloqué físicamente la ubicación en el enlace como ': action => 'index.xml'', aunque no se siente bien. – cbron

Respuesta

10
+0

No. También intenté usar una ruta de acceso de recursos: 'documents_path (: format =>: csv)' pero eso me envía a documents.csv en lugar de agregarlo como un param. – cbron

+1

'link_to 'cvs',: action => 'show',: format =>: csv' Lo intenté ahora, me funciona a la perfección. – Matzi

+0

Acabo de probar ese enlace exacto en otro controlador y todavía no funciona, pero está agregando el & format = xml para usted? Extraño. – cbron

0

se han topado con el mismo problema al actualizar de Rails 3.0 a 3.2.17.

Según lo que veo, el problema no era (como sugieren las otras respuestas) sobre la forma en que se especificaron los parámetros link_to, sino que tenía que ver con la definición de las rutas en routes.rb. Parece que en 3.2, el parámetro :format solo se puede pasar como un sufijo de URL. Si no hay una ruta que mapee :format a la URL, será ignorada por link_to. 3.0 habría agregado format como un parámetro HTTP, en tal caso. 3.2 ya no hace eso.

Mi solución fue cambiar mi ruta predeterminada original de

match ':controller(/:action(/:id(.:format)))' 

en direcciones URL cubiertos

match ':controller(/:action(/:id)(.:format))' 

la definición original como /admin/posts/index/5.xml, pero no /admin/posts/index.xml. Parece el mismo síntoma que en la pregunta original aquí.

Después de aplicar el cambio, el :format también se incluyó en las URL que no tenían un id en ellos.

Cuestiones relacionadas