Лучший способ построить несколько фильтров в рельсах - PullRequest
5 голосов
/ 28 сентября 2011

Я хочу построить динамические фильтры с рельсами для одной из моих моделей, но я не знаю лучший способ сделать это.

Моя модель en Event, у которой есть Континент , Страна и Месяц .

Итак, я хочу иметь возможность найти событие с несколькими фильтрами. Например, «Найдены все события в Европе за месяц февраля»

Какой лучший способ сделать это. Я должен сделать функцию findByfilter в моей модели событий?

Спасибо за ответ, пример приветствуется!

(я использую рельсы 3)

1 Ответ

4 голосов
/ 28 сентября 2011

Я предполагаю, что вы ищете немного больше, чем просто использование scope для создания фильтров:

то есть

class Event < ActiveRecord::Base
  scope :by_continent, lambda {|continent| where(:continent => continent)}
  scope :by_country, lambda {|country| where(:country => country)}
  ...
end

, а затем выполнение Event.by_continent('NA').by_country('Canada')

Если вы хотите построить более формальную поисковую модель с механизмом to_s и описать свой поиск, я, вероятно, начну с чего-то вроде Railscast 111 .Он строит расширенную модель поиска, которая в основном позволяет вам устанавливать поля, а затем фильтровать их на основе того, что установлено.

Исходя из этого, вы можете реализовать свой собственный метод to_s (или другое имя, если хотите), который будет приниматьпосмотрите, какие атрибуты поиска были установлены, и создайте красивую строку для ее описания.

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