Маршрутизация Rails: кроме вопроса

#ruby-on-rails #routes #except

#ruby-on-rails #маршруты #кроме

Вопрос:

Я пытаюсь создать простой блог с маршрутом контроллера posts к корневому URL, а не localhost / posts /: id.

Я добавил следующее в свой файл routes…

 match '/:id', :to => 'posts#show', :as => 'post'
  

Который работал достаточно хорошо. С тех пор это нарушило мой маршрут поиска.

 match 'search/:q', :to => 'posts#query', :as => 'search'
  

Похоже, rails пытается найти сообщение с идентификатором моего поискового запроса. Есть ли способ сделать что-то вроде следующего, чтобы заставить файл routes предполагать, что все, что после корневого URL, является идентификатором post EXECPT для чего-либо, начинающегося с ‘search’?

 match '/:id', :to => 'posts#show', :as => 'post', :except => 'search'
  

Ответ №1:

Rails анализирует ваши маршруты сверху вниз и останавливается на первом совпадении. Я бы поместил вашу match '/:id'... строку ниже всех ваших других маршрутов.