Экранирование элементов в URI Ruby On Rails - PullRequest
0 голосов
/ 28 февраля 2012

У меня есть приложение rails, в котором я пытаюсь выполнить запрос на получение с координатами в ... У меня есть маршрут в моем route.rb, например:

map.connect 'feeds/get/:location', :controller => "feeds", :action => "get"

Я могу отправитьстрока, состоящая из буквенно-цифровых символов, хорошо, но мне нужно отправить координаты в строке в URI в качестве запроса get:

51.896834,0.878906.

Итак, я экранировал строку так, и добавил ее в свой URI.

http://thisisnottheurl.net/feeds/get/51%2E896834%2C0%2E878906.xml 

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

ActionController::RoutingError (No route matches "/feeds/get/51.896834,0.878906.xml" with {:method=>:get}):

Как мне остановить рельсы, выходящие из этой строки (с маршрутами?), чтобы его можно было прочитать в контроллере?

Я смотрел на использование функции совпадения в rout.rb с регулярным выражением, но это только рельсы 3 ...

1 Ответ

0 голосов
/ 28 февраля 2012

Единственный реальный способ, которым я могу думать об этом, заключается в следующем, дать маршруту имя следующим образом:

map.connect 'feeds/get', :controller => "feeds", :action => "get", as: 'get_feeds'

Тогда у вас будет именованный помощник по маршруту get_feeds_path, который вы затем сможете передать по месту и в следующем формате:

get_feeds_path(:location => '51.896834,0.878906', :format => 'xml')

Что может быть даже лучше, если вы передадите два параметра, по одному для каждой из координат.

get_feeds_path(:x_location => '51.896834', :y_location => '0.878906', :format => 'xml')

Тогда хэш params, передаваемый контроллеру, должен иметь params[:x_location] и params[:y_location], которыми вы можете манипулировать по своему вкусу.

...