我搜索了一個相當簡單的問題,一個可行的解決方案,也沒有找到一個很好的解釋。如何添加列過濾器選項視圖(做「軌道路」)
我目前有(工作)是一個包含索引視圖:
- 形式進入一個新的元素和
- (使用will_paginate)現有元素的分頁列表。
因爲我感興趣的數據只是一部分的名單,因此我想以添加一個帶有過濾器的選擇,我想存儲在cookie中的內容形式(這應該與每個被替換用戶對象存儲在數據庫中,但我還沒有用戶)。我無法弄清楚是如何從存儲在cookie中(反之亦然)的形式,以及如何與will_paginated一起使用它得到的值。
我現在試圖做的第一步是建立在我的控制器的@filter對象,並添加過濾器形式的此對象,設置窗體選項再次使用該索引控制器。這導致在params散列中傳遞給索引控制器的選定過濾器參數(在url中可見)。但是這個解決方案有一些缺點。首先,只要我更改視圖(例如通過創建新元素),過濾器就會消失,其次,@filter對象應該是cookie。
這裏是我到目前爲止的代碼:
查看,部分用於過濾器:
<%= form_for(@filter, :url => {:action => "index"}, :html => {:method => :get}) do |f| %>
<div class="field">
<%= f.label :german %><br />
<%= f.check_box :german %>
</div>
<div class="actions">
<%= f.submit "Filter" %>
</div>
<% end %>
控制器:
def index
@word = Word.new
@filter = Word.new(params[:word])
@words = Word.paginate(:page => params[:page]).order('word')
# ....
任何人可以幫助我嗎?在其他應用程序中如何完成這樣的功能(過濾結果)?
通過「過濾器」你是否想要一些,但不是所有的數據庫記錄?起初,我以爲你的意思是你只想要一些_columns_。如果第一個,那麼你想使用'where'子句 - 例如'Word.where(「language =?」,params [:language])''。 – 2012-03-14 20:53:18
是的,我想過濾記錄。 – theldoria 2012-03-15 12:12:57
你的提示有一點幫助,我現在有以下行,它適用於複選框:'@words = Word.paginate(:page => params [:page])。order('word')。where(「德語=?「,params [:word] [:german]!=」0「)'。聲明的順序是否重要(例如關於性能)?據我瞭解情況並非如此。 – theldoria 2012-03-15 13:24:40