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.
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
@henrebotha assez sûr que cela fonctionnerait Il serait.. manquer le point d'utiliser la pensée STI. –