gpt4 book ai didi

ruby-on-rails - 使用具有单表继承的 accepts_nested_attributes_for 时验证失败

转载 作者:数据小太阳 更新时间:2023-10-29 08:58:48 32 4
gpt4 key购买 nike

我第一次使用 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:验证失败:包项包必须存在

我试过在 belongs_to 关系上设置 foreign_keyclass_name,但没有成功:

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

我在这里做错了什么?

更新:

这似乎是 Rails 5 和默认情况下具有 required: true 的关联的问题。当关闭 required: true 并在 Invoice 模型上设置 foreign_key 时,它会正确分配父模型 ID 并保存父模型和子模型.

最佳答案

事实证明它与 STI 无关,并且是一个已知的 Rails 5 错误。 :(

https://github.com/rails/rails/issues/25198

关于ruby-on-rails - 使用具有单表继承的 accepts_nested_attributes_for 时验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41783600/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com