2014-09-01 64 views
-2

我有一個包含項目列表和列表上方的頁面我有多個鏈接充當過濾器。點擊鏈接會導致一個Ajax請求被大量的URL參數觸發。點擊幾個過濾器後置則params的任何例子:Rails應用程序太多參數

?letters=a-e&page=1&sort=alphabetically&type=steel 

這是所有工作正常,但我覺得對URL的PARAMS非常凌亂,而後面的代碼必須做檢查,看看哪些則params的很多存在,合併新的,覆蓋現有的等。

有沒有更好的方式來完成這個沒有URL參數。

我猜這樣做的缺點是用戶無法鏈接到特定的過濾視圖,或者有沒有一種方法可以實現呢?

回答

1

使用長查詢字符串時,您有幾個選項。如果這不是真的造成問題(如請求死亡),那麼你應該問自己是否真的值得把它切換到別的東西上。

使用POST請求

如果查詢字符串的長度引起的問題,您可以切換到使用POST請求,而不是GET請求從您的過濾器鏈接。這將阻止URL包含過濾器參數,但您的控制器仍然可以用相同的方式處理參數。

link_to助手可以設置爲使用不同的HTTP動詞如下:

link_to("My Filter", filter_path, method: :post) 

請確保您更新您的路線正確,如果你使用這種技術。

使用一個Ajax請求刷新頁面

如果您配置過濾器全部是遠程(阿賈克斯)鏈接,您可以更新過濾器和刷新內容頁面的而沒有改變URL。這是解決方案的基本格局:

  • 發送遠程請求到服務器與當前的過濾選項
  • 更新基於這些過濾頁面內容
  • 確保過濾器(和遠程請求)將在用戶的會話再次提交所有的當前參數的

商店過濾器

如果您將當前過濾器存儲在會話中,只要用戶訪問基本頁面,就可以檢索存儲的過濾器並僅顯示適當的信息。您的過濾器鏈接仍然可以是GET請求(包括冗長的查詢字符串),但不是在過濾器請求之後呈現頁面,而是不需要額外的查詢參數即可重定向回主列表。這會讓用戶覺得URL永遠不會改變,甚至可以讓你記住他們最後的過濾器,如果他們離開了。

分享鏈接

就像你提到的,分享鏈接變得與所有這些解決方案的問題。您可以在頁面上提供「共享此過濾器」部分以幫助緩解該問題。您可以在該部分放置一個用戶可以複製的URL,其中包含重新創建過濾器的必要信息。鏈接可以包含完整的查詢字符串或者可能包含過濾器的編碼版本。

+0

感謝發佈。沒有機會通讀它,但我會。非常感謝。 – rctneil 2014-09-04 16:23:06