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

Как переименовать маршруты REST в URL?

Дайте мне модель под названием 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)

4b9b3361

Ответ 1

То, что вам нужно сделать, это передать параметр :path

resources :apples, :path => "cars"

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

Смотрите: http://guides.rubyonrails.org/routing.html, раздел 4.7 "Пути переноса"

Ответ 2

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

resources :apples, as: "cars"

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