1

Première utilisation d'IST et problèmes rencontrés lors de l'utilisation de accepts_nested_attributes_for avec des objets hérités imbriqués.Échec de la validation lors de l'utilisation de accept_nested_attributes_for avec l'héritage de table unique

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 

Quand j'essaie d'utiliser des attributs imbriqués, les choses ne fonctionnent plus:

Package.create!(title: 'test', 
       user: User.last, 
       package_items_attributes: [{title: 'test'}]) 

qui se traduit par l'erreur suivante:

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

J'ai essayé d'installer foreign_key et class_name sur la relation belongs_to, avec pas de chance:

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

Qu'est-ce que je fais mal ici?

MISE À JOUR:

Cela semble être un problème avec Rails 5 et associations required: true par défaut. Lors de la mise hors required: true et la mise en foreign_key sur le modèle Invoice, il attribue correctement le modèle parent ID et enregistre les modèles de modèle parent et enfant.

+0

Une pensée: peut-être les associations devraient être déclarées sur les classes parent plutôt que Ie pas PackageItem appartient à l'emballage, mais DocumentItem appartient au document – henrebotha

+0

@henrebotha assez sûr que cela fonctionnerait Il serait.. manquer le point d'utiliser la pensée STI. –

Répondre