Как сопоставить не REST URL-адреса с REST? - PullRequest
1 голос
/ 18 мая 2010

У меня есть небольшое приложение rails, которое имеет маршруты, созданные по умолчанию, например. /stadia/1.xml. Однако я должен поддерживать устаревшее клиентское приложение, которое не может правильно создавать такие URL. Что мне нужно сделать, это сопоставить URL в форме:

/stadia?id=1?format=xml до /stadia/1.xml

Или даже что-то вроде:

/myApp?model=<model_name>?id=<id>?format=xml до /<model_name/<id>.xml

Можно ли создать подходящий маршрут в Rails?

Ответы [ 3 ]

1 голос
/ 18 мая 2010

У меня нет хорошего ответа на это. Я бы изменил первую часть URL-адреса на /stadia_legacy для устаревших URL-адресов или изменил первую часть URL-адресов для маршрутов RESTful.

Тогда вы можете отобразить в маршрутах:

map.stadia_legacy :stadia_legacy, :controller => 'stadias', :action => 'please_redirect_me'

Затем в контроллере стадиона в действии please_redirect_me вы можете проверить все параметры (они доступны в params хэш: params[:id], params[:format] и т. Д.) И перенаправить на правильный URL. Или вы можете написать все маршруты вручную, чтобы исправить контроллер и действие.

0 голосов
/ 18 мая 2010

У меня был похожий вопрос . Пока ответов нет, поэтому, кажется, в файле rout.rb нет простого способа сделать это (маршрутизация на основе параметров запроса), что на самом деле меня удивляет.

Таким образом, уродливым обходным решением было бы иметь маршрут по умолчанию 'myApp', а затем иметь специальный контроллер перенаправления, который просматривал бы параметры запроса (потому что в контроллерах у вас do есть доступ к этому) и перенаправить соответственно.

0 голосов
/ 18 мая 2010

Что делать, если вы переписываете URL в apache?

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