命名空间:创建操作

Pet*_*kov 1 routes ruby-on-rails ruby-on-rails-4

我有模特Admin,UserAirport.

而且我想给管理员:create,:update等机场,而用户只能:show:index.但为了更好地阅读和管理路线,我希望new_airport_path有链接

domain.com/admin/airports/new
Run Code Online (Sandbox Code Playgroud)

并为 airports_path

domain.com/airports
Run Code Online (Sandbox Code Playgroud)

我已经进入namespaceroutes.rb

namespace :admin do
  resources :airports, only: [:new, :create, :edit, :update, :destroy]
end

resources :airports, only: [:show, :index]
Run Code Online (Sandbox Code Playgroud)

但是,当我去new_admin_airport_path我看看

未初始化的常量Admin :: AirportsController

因此,如果我移动airports_controlleradmin文件夹并将其重命名为Admin::AirportsController,我将不允许用户查看它,并收到错误

未初始化的恒定机场控制器

D-s*_*ide 5

您可以将其视为错误或提示:

您可以为单个资源创建多个控制器

事实上,这是常见的做法.

如果在网站的不同部分中对同一资源(模型?)的处理方式不同,这些部分最好由单独的控制器处理,因为网站这些部分的操作可能会重叠.比如,show管理员的操作可能会显示一些其他信息不可见的额外信息.使用相同的控制器,您必须使用支票来混淆视图,例如if @user.admin?,使用两个不同的控制器,可以轻松拥有两组不同的视图.

此外,这使得访问控制变得更加容易,因为如果组合控制器,您可以将对整个控制器的访问限制为特定的一组用户(管理员),而无需指定特定操作的列表.