Как переименовать REST-маршруты в URL? - PullRequest
29 голосов
/ 16 февраля 2011

Допустим, у меня есть модель с именем Apple и контроллер ApplesController, маршруты:

resources :apples

    apples  GET    /apples (.:format)          {:controller=>"apples ", :action=>"index"}
  new_apple GET    /apples /new(.:format)      {:controller=>"apples ", :action=>"new"}
 edit_apple GET    /apples /:id/edit(.:format) {:controller=>"apples ", :action=>"edit"}

Я бы хотел, чтобы весь код оставался неизменным, за исключением того, что в URL-адресе «яблоко» будет заменено на «автомобиль». Таким образом, URL /apples/new станет /cars/new.

Есть ли способ сделать это, не касаясь какого-либо другого кода в приложении? (то есть внутри приложения, оно все еще apple и ApplesController)

Я попробовал :as вариант:

resources :apples, :as => "cars"

    cars    GET    /apples (.:format)          {:controller=>"apples ", :action=>"index"}
  new_car   GET    /apples /new(.:format)      {:controller=>"apples ", :action=>"new"}
 edit_car   GET    /apples /:id/edit(.:format) {:controller=>"apples ", :action=>"edit"}

Но это только изменило «имя» маршрута, но не URL-адрес (поэтому new_apple_path стал new_car_path, но new_car_path по-прежнему указывает на /apples/new вместо /cars/new)

Ответы [ 2 ]

61 голосов
/ 16 февраля 2011

То, что вы хотите сделать, это передать в :path опцию

resources :apples, :path => "cars"

Это заменит все ваши ссылки на маршруты с /apples до /cars

См .: http://guides.rubyonrails.org/routing.html, Раздел 4.7 Перевод путей

1 голос
/ 12 марта 2017

Для тех, кто хочет переименовать часть вспомогательного метода:

resources :apples, as: "cars"

т.е. это заменит apples_path на cars_path, но все равно будет использовать тот же контроллер / действие.

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