1

처음 STI를 사용하고 중첩 된 상속 된 객체와 함께 을 사용하려고 할 때 문제가 발생합니다.단일 테이블 상속을 사용하여 accepts_nested_attributes_for를 사용할 때 유효성 검사에 실패했습니다

class Document < ApplicationRecord 
    # code removed for brevity 
end 

class DocumentItem < ApplicationRecord 
    # code removed for brevity 
end 

class Package < Document 
    belongs_to :user 
    validates :title, :user, presence: true 

    has_many :package_items, dependent: :destroy 
    accepts_nested_attributes_for :package_items, reject_if: :all_blank, allow_destroy: true 
end 

class PackageItem < DocumentItem 
    belongs_to :package 
end 

내가 중첩 된 속성을 시도하고 사용하는 경우, 상황이 작동하지 :

다음과 같은 오류가 발생
Package.create!(title: 'test', 
       user: User.last, 
       package_items_attributes: [{title: 'test'}]) 

가 :

ActiveRecord::RecordInvalid: Validation failed: Package items package must exist

내가 foreign_keyclass_name을 설정하려고했습니다 belongs_to 관계에, 행운과 :

class PackageItem < DocumentItem 
    belongs_to :package, foreign_key: 'document_id', class_name: 'Document' 
end 

내가 뭘 잘못하고 있니?

업데이트 :

이 레일 (5) 및 협회 기본적으로 required: true 데에 문제가 될 것으로 보인다. Invoice 모델에서 required: true을 끄고 foreign_key을 설정하면 올바르게 모델 ID를 할당하고 상위 모델 및 하위 모델을 저장합니다.

+0

생각 : 아마도 협회는 상위 클래스에 선언되어야 대신 IE는 PackageItem 패키지에 속해 있지 않고, DocumentItem는 문서에 속하는 일하는 것이 – henrebotha

+0

@henrebotha 확신 그것은 것.. STI 생각을 사용하는 지점을 놓치지 마라. : / –

답변