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_key
とclass_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が正しく割り当てられ、親モデルと子モデルが保存されます。
思考:おそらく団体ではなく、親クラスで宣言されなければならないIeはPackageItemパッケージに属していないのではなく、DocumentItemはそれが仕事とかなり確信して – henrebotha
@henrebothaをドキュメントに属していることがでしょうか?。。 STI思考の使用のポイントを逃している:/ –