Как фильтровать данные с помощью флажков?(рельсы) - PullRequest
0 голосов
/ 19 сентября 2011

Я создаю поисковую версию списков курсов моего университета, и я не уверен, как использовать флажки, чтобы позволить пользователям фильтровать классы по дням недели.Например, если пользователи хотят видеть только те классы, которые встречаются в понедельник и среду, они отмечают поля «M» и «W».

У меня уже все работает, но свыпадающее меню (в котором они могут выбрать один день недели), а не с флажками.

курсы http://img90.imageshack.us/img90/8626/courses.jpg

Вот как это работает:

Каждый раз, когда пользователь нажимает кнопку «поиск», я создаю новый объект поиска (который имеет атрибуты, такие как class_name), инструктор, день и т. д.) и отображать только те курсы, атрибуты которых соответствуют отправке формы.То есть, если пользователь выбирает «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».

В настоящее времяатрибут my: 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 здесь?

1 Ответ

0 голосов
/ 20 сентября 2011
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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...