Rails 3: маршрут ресурса к другому имени
У меня есть CRUD-контроллер для модели.
Выполнение resources :foo
позволяет мне маршрутизировать по /foo/:id
и т.д. для вызова действий.
Я хочу добавить маршрут для перевода 'foo' на другой язык. Пусть говорят "тото".
Поэтому я хочу, чтобы все маршруты /toto/:id
и т.д. Действовали точно так же, как маршруты /foo/:id
и т.д..
Как я могу это достичь?
Ответы
Ответ 1
Вы можете добавить новый ресурс и указать foo в качестве контроллера:
resources :toto, :controller=>"foo"
Это укажет все действия на "foo", но есть gotcha. Я думаю, что вы столкнетесь с проблемами со ссылками на странице, если вы используете foo_url или что-то в этом роде. Таким образом, вам нужно будет выяснить способ создания URL-адресов на основе контроллера на "request.path".
Ответ 2
Это позволит вам переименовать пути, видимые пользователем, но сохранить исходное имя ваших контроллеров в коде:
scope(:path_names => { :new => "neu", :edit => "bearbeiten" }) do
resources :categories, :path => "kategorien"
end
Из руководства Ruby on Rails
Ответ 3
Если вы правильно поняли, вы просто хотите использовать другой путь.
resources :foo, path: 'toto'
Теперь у вас будет:
GET /toto foo#index
GET /toto/:id foo#show
...
Ответ 4
Вы можете достичь чего-то близкого к этому с помощью области:
scope ':language/' do
resources :foo, controller: 'bar_controller'
end
Это сделает ваш bar_controller ресурсом для чего-либо/foo, где что-либо передается как параметр: language.
так:
- en_US/Foo
- de_DE/Foo
- ja_JP/foo
все обрабатываются bar_controller, с нормальным сопоставлением ресурсов, и вы получаете параметры [: language] в контроллере бесплатно.