ActiveAdmin 1.0.0 belongs_to - 无法自动加载父级

ActiveAdmin 1.0.0 belongs_to - Unable to autoload Parent

我正在使用 Rails gem 'activeadmin', '~> 1.0.0.pre2',并且到目前为止已经能够在我的项目中成功使用它。几个(大约 10 个)对象能够对其执行 CRUD,有些甚至包括其他表的外键。很棒的东西!

我遇到的问题是我有几个对象必须通过 belongs_to 关系显示,但是当我在其 ActiveAdmin 模型注册中的子对象上放置 belongs_to 时,尝试在本地 运行 WEBrick 时出现以下错误:

=> Booting WEBrick
=> Rails 4.2.4 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Exiting
/.rvm/gems/ruby-2.2.4/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:495:in `load_missing_constant': Unable to autoload constant Admin::ParentClass, expected /app/admin/parent_class.rb to define it (LoadError)

以下是目前存在的模型和 ActiveAdmin 注册:

app/models/parent_class.rb

class ParentClass < ActiveRecord::Base
  has_many :sub_objects
end

app/admin/parent_class.rb

ActiveAdmin.register ParentClass do
  permit_params :title
end

app/models/sub_object.rb

class SubObject < ActiveRecord::Base
  belongs_to :parent_class
end

app/admin/sub_object.rb

ActiveAdmin.register SubObject do
  belongs_to :parent_class

  permit_params :name
end

使用上面的设置,我仍然得到错误Unable to autoload constant Admin::ParentClass, expected /app/admin/parent_class.rb to define it (LoadError)

...但是如果我注释掉 app/admin/sub_object.rb 中的 belongs_to,它工作正常(但是路由 /admin/parent_classes/{id}/sub_objects 没有定义并且不起作用)

为什么会这样,我需要做什么才能完成这项工作(使用我在上一段中描述的路线)?

Timo(ActiveAdmin 项目成员)对我输入的 Github 问题的帮助下,我得以解决:

belongs_to :parent_class, class_name: "::ParentClass"

这似乎也是我的特定项目的问题,因为我无法在带有最新 Active Admin 1.0.0 gem 的香草 Rails 4 应用程序中重现它并安装(belongs_to 在没有 class_name 属性 的情况下工作)。

它不是 "standard" rails 应用程序,因为我们在主命名空间中有一个 "main" 应用程序 运行 一个 API 和一个 Angular 前端,然后是它自己的 /admin 命名空间中的 ActiveAdmin 为我们处理大量重复的 CRUD 操作。但到目前为止,ActiveAdmin 的工作一直没有打嗝。

如果我有时间,我会调查 为什么 我的项目需要 class_name,但除了确保它确实有效之外,我可能不会问继续前进。