ActiveAdmin 1.0.0 belongs_to - 无法自动加载父

时间:2016-03-10 20:45:04

标签: ruby-on-rails ruby-on-rails-4 activerecord activeadmin

我正在使用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注册:

应用/模型/ parent_class.rb

class ParentClass < ActiveRecord::Base
  has_many :sub_objects
end

应用/管理/ parent_class.rb

ActiveAdmin.register ParentClass do
  permit_params :title
end

应用/模型/ sub_object.rb

class SubObject < ActiveRecord::Base
  belongs_to :parent_class
end

应用程序/管理/ 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未定义且无效)

为什么会这样,为了使这项工作需要做什么(使用上面段落中描述的路线)?

1 个答案:

答案 0 :(得分:1)

在我输入的Github问题的Timo(ActiveAdmin项目成员)的帮助下,我能够弄清楚:

belongs_to :parent_class, class_name: "::ParentClass"

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

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

如果我有时间,我会调查为什么我的项目中需要class_name,但除了确保它真正起作用之外,我可能只是不要求继续前进。