У меня есть модель событий, которая имеет две названные области:
class Event < ActiveRecord::Base
scope :future, lambda { where('events.date >= ?', Time.zone.now) }
scope :past, lambda { where('events.date <= ?', Time.zone.now) }
end
Я вызываю эти области из моего контроллера, создавая два новых действия контроллера (называемых «будущее» и «прошлое»):
Мой контроллер:
class EventsController < InheritedResources::Base
actions :index, :show, :future, :past
has_scope :future
has_scope :past
def future
index! { @events = Event.future }
end
def past
index! { @events = Event.past }
end
end
У меня также есть представления и маршруты для этих дополнительных действий.
Это отлично работает. Мое приложение выполняет то, что я хочу, и я могу ссылаться на новые действия на боковой панели следующим образом:
%li
= link_to 'Events Home', events_path
%li
= link_to 'Future Events', future_events_path
%li
= link_to 'Past Events' past_events_path
Теперь моя проблема с этой настройкой заключается в том, что, хотя она работает просто отлично, мне не нравится тот факт, что мне нужно создавать новые действия, представления и маршруты для этих дополнительных областей. Я не думаю, что я делаю это правильно. По сути, я пытаюсь отфильтровать результаты на странице индекса, но для этого мне нужно создать новые действия, маршруты и представления. Это кажется немного громоздким, и мне интересно, есть ли другой путь.
Было бы неплохо, если бы я мог покончить с «будущим» и «прошлым» действиями контроллера и просто вызвать области видимости из вида следующим образом:
%li
= link_to 'Events Home', events_path
%li
= link_to 'Future Events', events_path.future
%li
= link_to 'Past Events' events_path.past
Очевидно, что это не работает. Я видел пример , который использует собственный помощник select_tag, но я вполне могу изменить его для работы без тега выбора или JS ...
лучше придерживаться текущего метода