:create 动作的命名空间
Namespace for :create action
我有模型 Admin
、User
和 Airport
。
我希望管理员可以访问 :create
、:update
等机场,而用户只能访问 :show
和 :index
。但是为了更好地阅读和管理路线,我希望 new_airport_path
有 link
domain.com/admin/airports/new
和 airports_path
domain.com/airports
我在 routes.rb
中取得了 namespace
namespace :admin do
resources :airports, only: [:new, :create, :edit, :update, :destroy]
end
resources :airports, only: [:show, :index]
但是,当我去 new_admin_airport_path
我看到
uninitialized constant Admin::AirportsController
因此,如果我将 airports_controller
移动到 admin
文件夹并将其重命名为 Admin::AirportsController
,我将不允许用户看到它,并收到错误消息
uninitialized constant AirportsController
你应该使用 scope
:
scope '/admin' do
resources :airports, only: [:new, :create, :edit, :update, :destroy]
end
您可以将 视为错误或提示:
您可以为单个资源制作多个控制器
事实上,这是常见的做法。
如果网站的不同部分对同一资源(模型?)的处理方式不同,则这些部分最好由单独的控制器处理,因为网站这些部分中的操作可能会重叠。比如说,管理员的 show
操作可能会显示一些其他人看不到的额外信息。使用相同的控制器,您必须使用 if @user.admin?
这样的检查来混淆视图,使用两个不同的控制器很容易拥有两组不同的视图。
此外,这使得访问控制变得更加容易,因为您可以将对整个控制器的访问限制为一组特定的用户(管理员),而无需在控制器组合时指定特定操作的列表。
您实际上需要设置两个 AirportsController。一个是 app/controllers/airports_controller.rb
,另一个是 app/controllers/admin/airports_controller.rb
将适当的操作放入每个控制器。
不要忘记检查您的 rake routes
以查看实际设置的内容以及它是否符合您的目标。
我有模型 Admin
、User
和 Airport
。
我希望管理员可以访问 :create
、:update
等机场,而用户只能访问 :show
和 :index
。但是为了更好地阅读和管理路线,我希望 new_airport_path
有 link
domain.com/admin/airports/new
和 airports_path
domain.com/airports
我在 routes.rb
namespace
namespace :admin do
resources :airports, only: [:new, :create, :edit, :update, :destroy]
end
resources :airports, only: [:show, :index]
但是,当我去 new_admin_airport_path
我看到
uninitialized constant Admin::AirportsController
因此,如果我将 airports_controller
移动到 admin
文件夹并将其重命名为 Admin::AirportsController
,我将不允许用户看到它,并收到错误消息
uninitialized constant AirportsController
你应该使用 scope
:
scope '/admin' do
resources :airports, only: [:new, :create, :edit, :update, :destroy]
end
您可以将 视为错误或提示:
您可以为单个资源制作多个控制器
事实上,这是常见的做法。
如果网站的不同部分对同一资源(模型?)的处理方式不同,则这些部分最好由单独的控制器处理,因为网站这些部分中的操作可能会重叠。比如说,管理员的 show
操作可能会显示一些其他人看不到的额外信息。使用相同的控制器,您必须使用 if @user.admin?
这样的检查来混淆视图,使用两个不同的控制器很容易拥有两组不同的视图。
此外,这使得访问控制变得更加容易,因为您可以将对整个控制器的访问限制为一组特定的用户(管理员),而无需在控制器组合时指定特定操作的列表。
您实际上需要设置两个 AirportsController。一个是 app/controllers/airports_controller.rb
,另一个是 app/controllers/admin/airports_controller.rb
将适当的操作放入每个控制器。
不要忘记检查您的 rake routes
以查看实际设置的内容以及它是否符合您的目标。