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

时间:2014-12-10 17:41:27

标签: ruby-on-rails ruby rails-activerecord single-table-inheritance

我有两个课程:CategoryMeter。与Category一样,Meter有一个名称,用于对各种Bill进行分类。它们之间的区别在于Meter有几个连接,并且可以有另一个CategoryMeter作为其父级。

我使用单表继承实现了这个域,但是当我尝试运行控制台或测试或服务器时,我收到'load_missing_constant': Circular dependency detected while autoloading constant Meter错误(完整跟踪为here.

以下是有问题的课程:

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

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

1 个答案:

答案 0 :(得分:2)

CategoryMeter都在它们的类定义中相互引用,因此如果没有先加载另一个,它们都不能加载。如果你将class_name放在引号中就应该是好的:

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

然而,我的蜘蛛网感觉与您的域名模型有点不同。您可能想要重新访问数据库设计,看看是否有另一个表应该包含Meter中的部分或全部内容,而不是使用STI。