2011-09-19 66 views
0

我創建了我大學課程列表的可搜索版本,但不確定如何使用複選框讓用戶在一週中的某一天過濾課程。例如,如果用戶只想看到星期一和星期三見面的課程,他們會檢查「M」框和「W」框。如何用複選框過濾數據? (導軌)

我基本上已經有了一切工作,但有一個下拉菜單(他們可以選擇一個星期幾),而不是用複選框。

courses http://img90.imageshack.us/img90/8626/courses.jpg

下面是它如何工作的:

每次用戶點擊「搜索」按鈕,創建一個新的搜索對象(其中有像CLASS_NAME,講師,日等屬性),並只顯示那些屬性與表單提交相匹配的課程。也就是說,如果用戶選擇「M」,我告訴那些課程,「金屬加工液」,「MW」,等等。這是我的看法代碼:

<td><%= f.select :day, [['Any', nil],['M', 'M'], ['T', 'T'], ['W', 'W'], ['Th', 'Th'], ['F', 'F']] %></td> 

這裏是我的搜索模式的代碼部分:

def courses 
    @courses ||= find_courses 
end 

def find_courses 
    Course.find(:all, :conditions => conditions) 
end 

def day_conditions 
    ["courses.day LIKE ?", "%#{day}%"] unless day.blank? 
end 

如何使用複選框而不是下拉菜單按日過濾?例如,我想讓用戶查看「M」和「W」,這將顯示具有「MW」和「MWF」的類別,但不顯示「MT」。

當前我的:day屬性是一個字符串。我是否需要將其更改爲數組?如果是這樣,我怎麼能添加一個數組到我的sqlite表? 「數組」似乎不是數據類型。

我知道我在這裏問一個更開放式的問題。請讓我知道,如果更多的信息會有所幫助。謝謝!


編輯:遵循克洛克納的建議,但仍然不知道如何設置我的表格,讓複選框形成一個數組。這是我的(壞)到目前爲止的代碼:

<td><%= fields_for @search do |form| %> 
      M: <%= form.check_box :day, {}, 'M', '' %> 
      T: <%= form.check_box :day, {}, 'T', '' %> 
      W: <%= form.check_box :day, {}, 'W', '' %> 
      Th: <%= form.check_box:day, {}, 'Th', '' %> 
      F: <%= form.check_box :day, {}, 'F', '' %> 
    <% end %> 

我想它,這樣,如果用戶點擊M和W,天= [M,W]傳遞給我的搜索模式。此時此代碼顯然是錯誤的,因爲它只是從最後一行(F:...)中提取值。我一直在搜索答案,但仍然找不到任何東西。我應該在這裏使用fields_嗎?

回答

0
days = ["m","w","f"] 
Course.where(["courses.day like ?","%"+days.join("%")+"%"]) 

要獲得天,嘗試<%= form.check_box "days[]", {}, "M", '', %>

有關說明見這裏:http://www.skuunk.com/2008/05/checkbox-arrays-in-rails.html

+0

謝謝,這是超級有幫助!我仍然無法弄清楚如何設置表單來啓用「天」數組。我將用更多信息編輯我的問題。 – jyli7