Rails 6.0.0.beta3 Ruby 2.6.1
我在Item
和Variant
之间有两个模型关联,如下所示:
class Item < ApplicationRecord
...
has_many :variants
accepts_nested_attributes_for :variants,
reject_if: :all_blank,
allow_destroy: true
end
和以下变体模型:
class Variant < ApplicationRecord
belongs_to :item, -> { where(kind: :article) }
end
如上所述,我们对belongs_to
有一个条件关系,它取决于Item
字段kind
的值为article
。
问题:
创建具有嵌套item
的表单字段的variant
时,它会提高对kind: :article
的期望,但会提高kind
的所有其他值,例如kind: :novel
。
在Rails控制台上,我尝试手动创建
item = Item.create(kind: :article)
item.variants.create
...
item = Item.create(kind: :novel)
item.variants.create
it raises validation error 'should be of kind: :article only'
它可在控制台上运行,但不适用于嵌套的表单字段。 其他相关的已知问题案例:https://github.com/rails/rails/issues/25198
答案 0 :(得分:0)
我建议在Variant
模型中验证项目类型,而不是在where
中验证belongs_to
。
因为您的情况Item.create!(kind: :novel).variants.create!
引发了错误(我尝试时Item must exist
)。
btw对此很感兴趣,并做了一个最小的测试仓库(https://github.com/localhostdotdev/bug/tree/belongs-to-where-and-accepts-nested-attributes)(虽然没有表格)。