Ruby on rails Rails:连接的STI类中的循环依赖

Ruby on rails Rails:连接的STI类中的循环依赖,ruby-on-rails,ruby,rails-activerecord,single-table-inheritance,Ruby On Rails,Ruby,Rails Activerecord,Single Table Inheritance,我有两门课:Category和Meter。与类别类似,计量器有一个名称,用于对各种账单进行分类。它们之间的区别在于仪表有多个连接,并且可以有另一个类别或仪表作为其父级 我已经使用单表继承实现了这个域,但是当我试图运行控制台、测试或服务器时,我得到了“load\u missing\u constant”:自动加载constant Meter时检测到循环依赖项(完整跟踪为) 以下是相关课程: meter.rb: class Meter < Category belongs_to :pare

我有两门课:
Category
Meter
。与
类别
类似,
计量器
有一个名称,用于对各种
账单
进行分类。它们之间的区别在于
仪表
有多个连接,并且可以有另一个
类别
仪表
作为其父级

我已经使用单表继承实现了这个域,但是当我试图运行控制台、测试或服务器时,我得到了
“load\u missing\u constant”:自动加载constant Meter时检测到循环依赖项(完整跟踪为)

以下是相关课程:

meter.rb:

class Meter < Category
  belongs_to :parent, class_name: Category
  has_many :meter_values, dependent: :destroy
  has_many :tariffs, dependent: :destroy
  validates :init_meter, presence: true
  validates :init_meter, numericality: { greater_than_or_equal_to: 0.0 }


  def current_tariff
    tariffs.first
  end
end
class仪表
category.rb:

class Category < ActiveRecord::Base
  has_many :bills, dependent: :destroy
  has_many :children, class_name: Meter, inverse_of: :parent, foreign_key: :parent_id

  validates_associated :bills
  validates :name, presence: true
end
类别
类别
仪表
在它们的类定义中都相互引用,因此在不先加载另一个的情况下,两者都不能加载。如果你把
类名
放在引号里,你应该很好:

has_many :children, class_name: 'Meter', ...

不过,我对你的领域模型有点敏感。您可能希望重新审视数据库设计,看看是否有另一个表应该包含
仪表中的部分或全部内容,而不是使用STI。

谢谢。最终我做到了。不过,这是另一天的故事。:)