Подтвердить что ты не робот

Rails 3: маршрут ресурса к другому имени

У меня есть CRUD-контроллер для модели.

Выполнение resources :foo позволяет мне маршрутизировать по /foo/:id и т.д. для вызова действий.

Я хочу добавить маршрут для перевода 'foo' на другой язык. Пусть говорят "тото". Поэтому я хочу, чтобы все маршруты /toto/:id и т.д. Действовали точно так же, как маршруты /foo/:id и т.д..

Как я могу это достичь?

4b9b3361

Ответ 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] в контроллере бесплатно.