:create 操作的命名空间



我有模型AdminUserAirport

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

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时,我看到

未初始化常量 管理员::机场控制器

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

未初始化常量机场控制器

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

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

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

如果同一个资源(模型?)在网站的不同部分被区别对待,这些部分最好由单独的控制器处理,因为网站这些部分的操作可能会重叠。比如说,管理员show操作可能会显示一些其他人看不到的额外信息。使用相同的控制器,您必须使用像if @user.admin?这样的检查来混淆视图,使用两个不同的控制器,很容易拥有两组不同的视图。

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

您实际上需要设置两个机场控制器。 一个将被app/controllers/airports_controller.rb,另一个将被app/controllers/admin/airports_controller.rb将适当的操作放入每个控制器中。

不要忘记检查您的rake routes,看看实际设置了什么以及它是否符合您的目标。

你应该使用scope

scope '/admin' do
resources :airports, only: [:new, :create, :edit, :update, :destroy]
end

相关内容

最新更新