У меня есть несколько объявлений об аренде, которые я хочу сделать доступными как ресурс RESTful, но также иметь фильтрацию индекса с помощью параметра :area, который может быть районом или регионом. Учитывая ресурс «аренда», я хотел бы иметь
/rentals
а также фильтрация параметров :area на корневом уровне
/downtown
/westside
/some-neighborhood
etc.
Я подумал, что смогу заставить это работать, поместив следующее в конец файла маршрутов:
resources :rentals
get ':area' => 'rentals#index', :area => /[a-zA-Z0-9\-]+/, :as => :area
Но когда я добавлял Kaminari для разбивки на страницы, он автоматически генерировал ссылки на страницы, чтобы они выглядели примерно так:
/rentals?area=downtown&page=2
когда я предпочел бы, чтобы это выглядело как
/downtown?page=2
Чтобы заставить Kaminari использовать версию именованного маршрута, параметр :area должен иметь приоритет, поэтому я изменил маршруты на:
get ':area' => 'rentals#index', :area => /(?!rentals)[a-zA-Z0-9\-]+/, :as => :area
resources :rentals
Но когда я пытаюсь распознать маршрут в консоли, я получаю:
ActionController::RoutingError: No route matches {:controller=>"rentals", :area=>"downtown"}
Я не уверен, как подойти к решению этой проблемы, поэтому любая помощь будет оценена по достоинству.