大場寧子のホームページ - モジュール下のコントローラをRESTfulにする Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
!モジュール下のコントローラをRESTfulにする
モジュールによって階層化されたコントローラをRESTfulにする場合は、map.resources などの記述を、map.namespace ブロックで囲みます。
例えば、Admin::UsersController を RESTfulにするための routes.rb の記述は次のようになります。
map.namespace(:admin) do |admin|
admin.resources :users
end
上記は、ブロック内の map.resources を単独で次のように記述するのと同じ意味です。
admin.resources :users, :path_prefix => :admin, :name_prefix => "admin_", :namespace => "admin/"
namespace ブロック内で記述することで、これらのオプションを、複数のルート記述に対して一括で適用できます。なお、これら3つのオプションの意味は以下のようになります。
* :path_prefix - URLの前につけるパス
* :name_prefix - URLヘルパーメソッド名の前につける文字列
* :namespace - namespace 自体の名前空間。((-2つ以上のモジュール階層を表現するために使われます。通常、自分で指定する必要はありません。-))
!! namespace のネスト
Admin::Accounting::AccountsController のように、モジュール階層が2つ以上の場合は、namespace をネストして使うことができます。
map.namespace :admin do |admin|
admin.resources :users
admin.namespace :accounting do |accounting|
accounting.resources :accounts
end
end
!! オプションのカスタマイズ
map.namespace のデフォルトのオプション生成を変更したい場合は、2つめの引数でこれらのオプションを指定することができます。
例えば、Admin配下のコントローラのURLを /admin/ ではなく /a/ にしたい場合は、次のように path_prefix を指定しても動作します。
map.namespace :admin, :path_prefix => 'a' do |admin|
admin.resources :users
end
ただし、ネストしたnamespaceでは、最上位のnamespaceでしかこのような指定は意図したように動作しません。基本的には、namespace のオプションは使わず、resources など、ルート単位のオプションを利用するようにした方がよいでしょう。
map.namespace :admin do |admin|
admin.resources :users, :path_prefix => 'a'
admin.namespace :accounting do |accounting|
accounting.resources :accounts, :path_prefix => 'a/acc'
end
end
モジュールによって階層化されたコントローラをRESTfulにする場合は、map.resources などの記述を、map.namespace ブロックで囲みます。
例えば、Admin::UsersController を RESTfulにするための routes.rb の記述は次のようになります。
map.namespace(:admin) do |admin|
admin.resources :users
end
上記は、ブロック内の map.resources を単独で次のように記述するのと同じ意味です。
admin.resources :users, :path_prefix => :admin, :name_prefix => "admin_", :namespace => "admin/"
namespace ブロック内で記述することで、これらのオプションを、複数のルート記述に対して一括で適用できます。なお、これら3つのオプションの意味は以下のようになります。
* :path_prefix - URLの前につけるパス
* :name_prefix - URLヘルパーメソッド名の前につける文字列
* :namespace - namespace 自体の名前空間。((-2つ以上のモジュール階層を表現するために使われます。通常、自分で指定する必要はありません。-))
!! namespace のネスト
Admin::Accounting::AccountsController のように、モジュール階層が2つ以上の場合は、namespace をネストして使うことができます。
map.namespace :admin do |admin|
admin.resources :users
admin.namespace :accounting do |accounting|
accounting.resources :accounts
end
end
!! オプションのカスタマイズ
map.namespace のデフォルトのオプション生成を変更したい場合は、2つめの引数でこれらのオプションを指定することができます。
例えば、Admin配下のコントローラのURLを /admin/ ではなく /a/ にしたい場合は、次のように path_prefix を指定しても動作します。
map.namespace :admin, :path_prefix => 'a' do |admin|
admin.resources :users
end
ただし、ネストしたnamespaceでは、最上位のnamespaceでしかこのような指定は意図したように動作しません。基本的には、namespace のオプションは使わず、resources など、ルート単位のオプションを利用するようにした方がよいでしょう。
map.namespace :admin do |admin|
admin.resources :users, :path_prefix => 'a'
admin.namespace :accounting do |accounting|
accounting.resources :accounts, :path_prefix => 'a/acc'
end
end