如何使用复选框过滤数据? (导轨)

时间:2011-09-19 19:27:33

标签: ruby-on-rails search checkbox filter

我正在创建我的大学课程列表的可搜索版本,并且我不确定如何使用复选框让用户在星期几之前过滤课程。例如,如果用户想要查看星期一和星期三见面的那些课程,他们会勾选“M”框和“W”框。

我基本上已经完成了所有工作,但是有一个下拉菜单(他们可以选择一周一天),而不是复选框。

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

以下是它的工作原理:

每次用户点击“搜索”按钮时,我都会创建一个新的搜索对象(具有class_name,instructor,day等属性),并仅显示其属性与表单提交相匹配的那些课程。也就是说,如果用户选择“M”,我会用“MWF”,“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表中添加一个数组? “数组”似乎不是数据类型。

我知道我在这里问一个更开放的问题。如果有更多信息可以提供帮助,请与我们联系。谢谢!


编辑:遵循Klochner的建议,但仍然不确定如何设置我的表单以使复选框形成一个数组。到目前为止,这是我的(坏)代码:

<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_for吗?

1 个答案:

答案 0 :(得分: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