我正在创建我的大学课程列表的可搜索版本,并且我不确定如何使用复选框让用户在星期几之前过滤课程。例如,如果用户想要查看星期一和星期三见面的那些课程,他们会勾选“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表中添加一个数组? “数组”似乎不是数据类型。
我知道我在这里问一个更开放的问题。如果有更多信息可以提供帮助,请与我们联系。谢谢!
<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吗?
答案 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