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,但除了确保它确实有效之外,我可能不会问继续前进。
我正在使用 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,但除了确保它确实有效之外,我可能不会问继续前进。