Маршрутизатор не может определить разницу между: language и a: tag.
Только потому, что ваши маршруты говорят "language" и "tag", когда вы создаете свой код в представлении ... помните, что вHTML-код, который был переведен в простые URL-адреса, например / spanish или / rails
, маршрут должен быть определен по этому URL.
Теперь, как я уже сказал, маршрутизатор может 'не говорите, что конкретное слово является языком или тегом ... и на обычном URL-адресе больше нет слова "тег" или "язык" ... так что ваши двамаршруты здесь:
match '/:language', :to => 'posts#search_result'
match '/:tag', :to => 'posts#search_result'
оба являются одинаковыми типом URL
Всего один токен после косой черты.Вот несколько примеров, которые будут соответствовать этому маршруту:
/greek
/spanish
/rails
/urdu
/whatever
Они будут all соответствовать первому маршруту, который соответствует "одному токену после косой черты" ... что означает ваш маршрутизаторсопоставит их все с маршрутом «language» и никогда не будет соответствовать маршруту «/: tag», потому что он уже сопоставлен с маршрутом выше.
he he: все по-гречески к маршрутизатору;)
Редактировать:
Привет, это очень помогает мне понять, как работает маршрутизация ... но все же я не могу видеть это ясно.Я понимаю, что вы сказали, и поэтому в основном я понимаю, что я должен сделать что-то вроде match '/ tags /: tag, чтобы, по крайней мере, только маршрутизировать к публикациям # search_result URL-адреса, начинающиеся с / tag .. что было бы решением ??
да, "/ tags /: tag" будет понятным и недвусмысленным, но если вы хотите, чтобы он был действительно гибким в языке tag против языка, вам лучше обойтись простым:
match '/posts/search', :to => 'posts#search_result'
который может использовать любой из приведенных выше примеров link_to для генерации, например:
/posts/search?tag=rails
/posts/search?language=spanish
/posts/search?language=spanish&tag=rails
Также гораздо яснее, что передается, и почему .
Описаниетретий URL-адрес: «Я ищу набор сообщений, которые имеют language = spanish и tag = rails»
Ваш URL должен отражать ресурс (который в данном случае является наборомсообщений) все остальное лучше сделать в виде параметров запроса.