Я создаю очень простое приложение для событий, которое имеет title и start_date и end_date . Я хотел бы отфильтровать свой запрос, смешав некоторые значения, например: если start_date прошло, а end_date нет, событие активно и должно отображаться. Если обе даты прошли, ее тоже следует опустить. Я думаю, что области - это ответ, но мне удалось отфильтровать записи только в представлении, используя некоторые методы, показанные ниже.
Я действительно хотел бы отфильтровать запрос, который передается в контроллер (@events). Я хочу показать все события, которые активны, имеют будущую дату начала или прошлую дату начала, но все еще находятся в процессе (сегодняшняя дата находится в диапазоне между датой начала и конца)
EDITED
Я сделал несколько областей, которые возвращают каждую часть запроса. Цепочка их фактически вычитает результаты, а не объединяет их. Так что я использовал этот код, и на самом деле работает я не знаю, насколько это твердо или сухо. Выглядит немного уродливо для меня ... это достойный способ объединить запросы в рельсах 3?
scope :active, where("active = ?", true)
scope :not_over_or_in_progress, lambda { where("start_date < ? AND end_date > ? OR end_date IS NULL AND start_date > ? OR end_date IS NOT NULL AND start_date > ?", Date.today, Date.today, Date.today, Date.today) }
scope :valid, not_over_or_in_progress.active.order("start_date DESC")