11

我正在将一个项目从 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
4

2 回答 2

13

尝试使用:format => :csv

http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to#32-Link-to-same-URL-with-different-format

于 2012-05-02T20:19:46.657 回答
0

从 Rails 3.0 升级到 3.2.17 时,我遇到了同样的问题。

据我所见,问题不在于(正如其他答案所暗示的那样)关于link_to指定参数的方式,而与routes.rb. 看起来在3.2中,:format参数只能作为URL后缀传递。如果没有映射:format到 URL 的路由,那么它将被忽略link_to。在这种情况下, 3.0 将添加format为 HTTP 参数。3.2 不再这样做了。

我的解决方案是更改我原来的默认路由

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

进入

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

最初的定义涵盖了类似的 URL /admin/posts/index/5.xml,但不包括/admin/posts/index.xml. 这看起来与此处原始问题中的症状相同。

在我应用更改后,它:format也包含在其中没有的 URL 中id

于 2014-05-17T13:05:08.243 回答