web-dev-qa-db-ja.com

URLのRESTルートの名前を変更する方法は?

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になります。

アプリ内の他のコードに触れずにこれを行う方法はありますか? (つまり、アプリの内部では、まだAppleApplesControllerです)

: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_pathnew_car_pathになりましたが、new_car_path/apples/newではなく/cars/newを指します。 )

32
Zabba

あなたがしたいことは:pathオプションを渡すことです

resources :apples, :path => "cars"

これにより、すべてのルート参照が/applesから/carsに置き換えられます。

参照: http://guides.rubyonrails.org/routing.html 、セクション4.7パスの変換

61
raidfive

ヘルパーメソッド部分の名前を変更することだけを求めている人のために:

resources :apples, as: "cars"

つまりこれにより、apples_pathcars_pathに置き換えられますが、同じコントローラー/アクションが使用されます。

0
Fellow Stranger