在link_to中指定:format格式在rails 3.2.2中不起作用

时间:2012-05-02 19:16:59

标签: ruby-on-rails-3 ruby-on-rails-3.2 link-to

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

2 个答案:

答案 0 :(得分:10)

答案 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的网址中。