1

두 클래스가 있습니다 : CategoryMeter입니다. Category처럼 Meter에는 이름이 있으며 다양한 Bill을 분류하는 데 사용됩니다. 그들 사이의 차이점은 Meter이 몇 개의 연결이 더 있고 Category 또는 Meter을 부모로 가질 수 있다는 점입니다.레일 : 연결된 STI 클래스의 순환 종속성

여기

은 내가 단일 테이블 상속을 사용하여이 도메인을 구현했습니다,하지만 난이 '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 

답변

2

CategoryMeter은 둘 다 클래스 정의에서 서로를 참조하므로 둘 중 먼저로드되지 않고로드 할 수 없습니다. 당신이 따옴표로 class_name을 두는 경우에 당신이 잘되어야합니다 :

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

내 스파이더 맨의 감각 도메인 모델을하지만, 간지 조금. 데이터베이스 설계를 다시보고 STI를 사용하는 것보다 Meter에있는 테이블의 일부 또는 전부를 보유해야하는 다른 테이블이 있는지 알아볼 수도 있습니다.

+0

감사합니다. 결국 제가 한 것입니다. 그것은 또 다른 하루 동안의 이야기 다. :) –