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 

私はここで間違っていますか?

UPDATE:

これはRailsの5、デフォルトでrequired: trueを持つ団体との問題のようです。 Invoiceモデルでrequired: trueをオフにしてforeign_keyを設定すると、親モデルIDが正しく割り当てられ、親モデルと子モデルが保存されます。

+0

思考:おそらく団体ではなく、親クラスで宣言されなければならないIeはPackageItemパッケージに属していないのではなく、DocumentItemはそれが仕事とかなり確信して – henrebotha

+0

@henrebothaをドキュメントに属していることがでしょうか?。。 STI思考の使用のポイントを逃している:/ –

答えて

関連する問題