简体   繁体   中英

Rails: Circular dependency in connected STI classes

I have two classes: Category and Meter . Like a Category , a Meter has a name and is used to categorise various Bill s. The difference between them is that a Meter has several more connections and can have another Category or Meter as its parent.

I've implemented this domain using single-table inheritance, but when I'm trying to run the console or the tests or the server I get the 'load_missing_constant': Circular dependency detected while autoloading constant Meter error (the full trace is here. )

Here are the classes in question:

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

Category and Meter both reference each other in their class definitions, so neither can load without the other being loaded first. If you put the class_name in quotes you should be good:

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

My spidey sense is a little tingly, though, with your domain model. You may want to revisit your database design and see if there's another table that should be holding some or all of what is in Meter rather than using STI.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM