ruby-on-rails AdministrateGem还不支持命名空间模型

z0qdvdin  于 2023-08-08  发布在  Ruby
关注(0)|答案(4)|浏览(130)

我正在通过TutsPlus模块化Rails应用程序培训here开发模块化Rails应用程序。
然而,在安装 Administrate Gem 并运行rails generate administrate:install安装我的 Jmeter 板后,我得到了如下图所示的错误:


的数据
简而言之,Administered Gem不适用于模块化Rails应用程序。我该如何解决这个问题,或者我该如何让AdministrateGem支持命名空间模型???

我做了什么:

我试过硬编码一个 Jmeter 板,但不只是与管理工作(Rails只是不能罚款管理宝石在一个模块化的Rails应用程序,因为这个错误,但与一个单片Rails应用程序)。

gmxoilav

gmxoilav1#

合并此PR后,Now Administrate支持命名空间资源。下面是命名空间模型的示例解决方案。假设您在blog名称空间中有一个post模型。

型号

app/models/blog/post.rb

字符串
现在,您想将其添加到管理面板。
只要遵循这个结构就可以了。

config/routes.rb

namespace :admin do
    namespace :blog do
      resources :posts
    end
    root to: "admin_users#index"
end

#app/admin/blog/posts_controller.rb

module Admin
  class Blog::PostsController < Admin::ApplicationController
  end
end

#app/dashboards/blog/posts_dashboard.rb

require "administrate/base_dashboard"

class Blog::PostDashboard < Administrate::BaseDashboard
  #normal stuff
end


有关详细的解决方案,请查看此discussion

yrwegjxp

yrwegjxp2#

如果你想弄清楚如何将单表继承(STI)模型添加到你的Administrate Jmeter 板中,下面是我如何使用Administrate gem的0.18.0版本来实现这一点的:
1.使用gem的generator为模型的基类搭建一个新的控制器和dashboard对象:

rails generate administrate:dashboard Foo::Base

字符串
1.将命名空间路由定义添加到routes.rb文件中:

Rails.application.routes.draw do
  ...
    namespace :admin do
      ...
      namespace :foo do
        resources :bases
      end
      ...
    end


1.将新生成的控制器移动到具有模型命名空间名称的子文件夹中。例如,controllers > admin > bases_controller.rb变为controllers > admin > foo > bases_controller.rb
1.通过覆盖find_resource(param)方法更新控制器。注意becomes的使用这是必要的,因为如果没有它,Administrate gem将尝试基于特定的模型示例类(如Foo::Bar)生成路径,但在上面的routes.rb文件中,我们只添加了Foo::Base类的路由。

module Admin
  class Foo::BasesController < Admin::ApplicationController

    ...

    def find_resource(param)
      resource_class.find_by!(id: param)
        .becomes(resource_class) # this ensures that the resource is presented as an Foo::Base,
                                  # not as an Foo::Bar, Foo::Baz, etc.
    end


1.最后,您需要添加一个自定义屈折器来处理单词Base的复数化。如果没有它,由于某种原因,Rails将Base复数化为Basis,而不是Bases(Administrate期望后者)。如果不这样做,您将看到如下错误消息:

NameError (uninitialized constant Foo::BasisDashboard):


就是这样!
我应该做一个PR来更新生成器的行为,以便自动为STI模型执行此操作,但与此同时,这些变通方法让我的命名空间模型添加到 Jmeter 板中。

blmhpbnm

blmhpbnm3#

仔细阅读并遵循说明,然后更新我

什么是管理?

Administrate是一个Rails应用程序库,可以自动生成管理 Jmeter 板。Administrate的管理 Jmeter 板为非技术用户提供了干净的界面,允许他们为应用程序中的任何模型创建、编辑、搜索和删除记录。
Administrate解决了与Rails Admin和ActiveAdmin相同的问题,但旨在为站点管理员提供更好的用户体验,并使开发人员更容易自定义。
为了实现这些目标,Administrate遵循以下几个指导原则:

  • 无DSL(特定领域语言)
  • 支持最简单的用例,并允许用户使用标准工具(如纯Rails控制器和视图)覆盖默认值。
  • 将库分解为核心组件和插件,因此每个组件都很小,易于维护。

入门

Administrate支持Rails 4.2到5.0及更高版本。
将Administrate添加到Gemfile并重新绑定:

gem "administrate"

字符串
然后在终端中运行bundle install!!!
包含的安装程序将为您的应用中的每个模型创建 Jmeter 板,并包含路由:

$ rails generate administrate:install


重新启动服务器,然后访问http://localhost:3000/admin以查看新 Jmeter 板的运行情况。
要获得更详细的说明或使其与Rails API应用程序一起工作,请参阅“入门”指南。

6qftjkof

6qftjkof4#

它支持命名空间:

rails generate administrate:install --namespace=super_admin

字符串
要创建带有命名空间的 Jmeter 板,请执行以下操作:

rails generate administrate:dashboard Model --namespace=super_admin

相关问题