2013-07-26 42 views
2

我有一個訂單頁面。此訂單頁面有多種可選的過濾器,所以在任何給定時間,用戶可能會在像這樣的路徑:如何獲取當前路徑,包括GET參數,但沒有框架參數

/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 

這包括我的PARAMS,但它包含了一堆框架則params的呢!

第二次嘗試:

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

OK ......這除去所有的參數。

我錯過了一個簡單的方法來得到我想要的東西嗎?

回答

1

一些經過研究,我發現這個解決方案:

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

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

params哈希包含了所有參數,包括那些我不想要,但url_for正確剔除的參數被路線覆蓋。

1
=link_to 'Export as CSV', 
url_for({format: :csv}.merge(params.except(:action, :controller, :subdomain)) 
+0

夠公平的......雖然在我的實際情況中,這個URL可以很深地嵌套(例如,'/ companies/14/teams/37/orders') - 這意味着一堆其他'_id'字段是在params列表中也是如此。理想情況下,我可以以某種方式排除屬於路線的所有參數,而不必全部列出。 –

+0

@ElliotNelson所以也許可以嘗試白名單允許PARAMS? –