Отрицательное ограничение регулярных выражений в маршрутах Rails 3 - PullRequest
2 голосов
/ 05 июня 2011

У меня есть некоторые списки аренды, которые я хочу, чтобы они были доступны в качестве ресурса RESTful, но при этом индекс должен быть отфильтрован через параметр: area, который может быть районом или районом.Учитывая ресурс аренды, я хотел бы иметь

/rentals

, а также: фильтрацию параметров области на корневом уровне

/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"}

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

1 Ответ

2 голосов
/ 08 июля 2011

Вы можете использовать лямбды в своих ограничениях маршрута, чтобы решить эту проблему

match ':area' => 'rentals#index', :constraints => lambda{|req|  !req.env["REQUEST_URI"].include? "rentals"}
...