Завершение Rails 2 URL с IP-адресом вызывает ошибку маршрутизации? - PullRequest
5 голосов
/ 07 мая 2010

Я пытаюсь создать URL в формате http://servername/find/by/CRITERION/VALUE

CRITERION - это конечный набор строк, как и VALUE. Проблема в том, что в некоторых ситуациях VALUE должен быть IP-адресом, и это вызывает у меня ошибку маршрутизации.

Вот мой маршрут:

  map.find 'find/by/:criterion/:query', :controller => "find", :action => "by"

И ошибка, из журналов беспородных:

Processing ApplicationController#index (for 127.0.0.1 at 2010-05-07 10:20:32) [GET]
ActionController::RoutingError (No route matches "/find/by/ip/1.2.3.4" with {:method=>:get}):
Rendering rescues/layout (not_found)

Если я захожу / найду / по / foo / bar или / найду / по / foo / 1234, у меня нет проблем. Я подозреваю, что проблема может заключаться в том, что Rails делает вывод типов MIME на основе периодов в URL, но я не знаю, как можно это отключить. Я попытался передать: defaults => {: format =>: html} в маршрут, но из-за этого Mongrel не запускается полностью.

Любая помощь приветствуется!

1 Ответ

5 голосов
/ 07 мая 2010

Маршрутизация сглаживания сработало!

Мой маршрут сейчас:

map.connect 'find/by/*query', :controller => "find", :action => "by"

Это помещает все, что следует за / find / by / в массив, params [: query], по одному сегменту URL на каждый объект массива. Для запроса /find/by/ip/1.2.3.4 это выглядит так:

["ip", "1.2.3.4"]

Так что я могу просто сослаться на params [: query] [0] и params [: query] [1].

Если у кого-то есть лучший способ сделать это, пожалуйста, опубликуйте его!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...