2

我有一个订单页面。此订单页面有多种可选过滤器,因此在任何给定时间,用户可能处于如下路径:

/orders?from_date=05/01/2013&status=3

此页面上有一个按钮,可以将用户正在查看的任何内容导出为 CSV。当我点击这个按钮时,我想点击完全相同的 URL,只是格式为 CSV。所以我在上面的例子中寻找的是:

/orders.csv?from_date=05/01/2013&status=3

第一次尝试:

<%= link_to 'Export as CSV', current_url(:format => :csv) %>
=> /orders.csv?from_date=05/01/2013&status=3&action=show&controller=orders&subdomain=www

这包括我的参数,但它也包括一堆框架参数!

第二次尝试:

<%= link_to 'Export as CSV', url_for(:format => :csv) %>
=> /orders.csv

好的...删除了所有参数。

我错过了获得我想要的东西的简单方法吗?

4

2 回答 2

1
=link_to 'Export as CSV', 
url_for({format: :csv}.merge(params.except(:action, :controller, :subdomain))
于 2013-07-26T11:29:46.997 回答
1

经过更多研究,我找到了这个解决方案:

<%= link_to 'Export to CSV', url_for(params.merge(:format => :csv)) %>

=> /orders.csv?from_date=05/01/2013&status=3

params哈希包含所有参数,包括我不想要的参数,但正确url_for地去除了路由覆盖的参数。

于 2013-07-26T13:56:16.807 回答