Rails Routes: Scope vs Namespace

06 Oct 2017

Namespace就是一种特定的Scope. 无非就是配置module, path, as 三个参数.

scope

  1. 不使用scope的routes样式
  resources :users

  1. 使用scope默认配置样式
  scope :admin do
    resources :users
  end

可见,scope的默认设置是在URI Pattern加了一个admin前缀

  1. 使用scope并配置module
  scope module: 'admin' do
    resources :users
  end

可见,module配置的是嵌套在controller外的module

  1. 使用scope并配置module + path
  scope module: 'admin', path: 'foo' do
    resources :users
  end

可见,path是配置的,URI Pattern的前缀

  1. 使用scope并配置module + path + as
  scope module: 'admin', path: 'foo', as: 'bar' do
    resources :users
  end

可见,as是配置的 routes的helper method的方法名前缀

Namespace

使用namespace进行配置

namespace :admin do
  resoruces :users
end

可见,namespace就是一种特殊的scope,其所做的就是把module, path,as都设置为admin

同样反推回去的样子就是

scope module: :admin, path: :admin, as: :admin do
  resources :users
end

另外,使用namespace其实一样可以对这三个参数进行重新配置,

namespace :admin, module: :admin, path: :foo, as: :bar
  resoruces :users
end

不过这样就显得有点多余…

参考资料