2010-04-24 51 views
5

G'day guys,我正在過濾我的系統中有幾千個貿易項目的演示文稿。根據我們正在構建的系統的規格,我們必須有一個表單,允許用戶輸入開始日期,然後在幾分鐘內輸入時間間隔,以過濾項目的表示。我已經構建了我的幫助器函數以在該間隔時間內返回所有交易,但是我無法正確構建將在索引頁頂部返回dateTime值和整數值的表單嗎?構建一個rails窗體來過濾索引頁面?

任何想法?我是否必須建立一個單獨的模型對象來分配值,還是有一個更簡單的方法?

回答

16

在你的索引頁面,您可以創建一個過濾器表單如

<%= form_tag '', :method => :get do %> 
    <%= text_field_tag :value_one %> 
    <%= text_field_tag :value_two %> 
    <%= submit_tag 'Filter' %> 
<% end %> 

你的表格然後會做的查詢字符串參數,然後在你的控制器,你可以找濾波器參數您的網頁上獲取可能已經通過了。

+2

如果你想從URL中省略'&commit = Filter',你可以寫'<%= submit_tag'Filter',name:nil%>'。 – 2013-11-12 18:50:10

2

我喜歡慢慢在我的控制器建立一個過濾器,即:如果沒有過濾器在您的視圖中選擇

def index 

    filter = [] 

    if params.has_key?("filter") 

    if !params[:filter][:user_id].blank? 
     id = params[:filter][:user_id] 
     filter << ["user_id = #{id.to_i}"] 
    end 

    if !params[:filter][:project_id].blank? 
     id = params[:filter][:project_id] 
     filter << ["project_id = #{id.to_i}"] 
    end 

    if !params[:filter][:change_type_id].blank? 
     id = params[:filter][:change_type_id] 
     filter << ["change_type_id = #{id.to_i}"] 
    end 

    end 

    @logs = LogEntry.where(filter.join(" AND ")).order('created_at DESC')  

end 

(我用的是select_tag形式助手),您的數據庫查詢將返回所有記錄。

+1

我喜歡這種方法(這是問題答案的第二部分!)。也許不是'!params [...]空白嗎?「這個」params [...]存在?「稍微漂亮一些。 – 2012-08-05 15:25:21

+4

實際上,您不必逐漸構建這樣的過濾器,而是應該逐漸構建一個活動記錄查詢,方法是通過調用各種條件的where語句逐步縮小結果集。即使您有多次對LogEntry模型的調用,Rails也足夠聰明,可以在一個語句中執行它。 – Noz 2012-11-09 22:47:15