我正在将一个项目从rails 3.1移动到rails 3.2.2,我有这个:
= link_to 'CSV', :action => 'list', :search => @search, :format => 'csv'
在rails 3.1中,它指定了html链接中的格式(format = csv),并且它被respond_with捕获,但在3.2.2中,格式永远不会进入链接。我扫描了github上的提交列表,找不到与此相关的任何内容。
编辑:
看起来这是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 :(得分:10)
尝试使用:format => :csv
答案 1 :(得分:0)
从Rails 3.0升级到3.2.17时遇到了同样的问题。
从我看到的,问题不是(正如其他答案所示)关于指定link_to
的参数的方式,而是与routes.rb
中的路线定义有关。看起来在3.2中,:format
参数只能作为URL后缀传递。如果没有将:format
映射到网址的路由,则link_to
将忽略该路由。在这种情况下,3.0会添加format
作为HTTP参数。 3.2不再这样做了。
我的解决方案是从
更改我原来的默认路线match ':controller(/:action(/:id(.:format)))'
到
match ':controller(/:action(/:id)(.:format))'
原始定义涵盖/admin/posts/index/5.xml
等网址,但不包括/admin/posts/index.xml
。这看起来与此处原始问题中的症状相同。
应用更改后,:format
也包含在未包含id
的网址中。