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で「Apple」が「car」に置き換えられることを除いて、すべてのコードを同じに保ちたいと思います。したがって、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
を指します。 )
あなたがしたいことは:path
オプションを渡すことです
resources :apples, :path => "cars"
これにより、すべてのルート参照が/apples
から/cars
に置き換えられます。
参照: http://guides.rubyonrails.org/routing.html 、セクション4.7パスの変換
ヘルパーメソッド部分の名前を変更することだけを求めている人のために:
resources :apples, as: "cars"
つまりこれにより、apples_path
がcars_path
に置き換えられますが、同じコントローラー/アクションが使用されます。