【发布时间】:2017-03-02 19:54:17
【问题描述】:
我有一个模型 A,它接受模型 B 的嵌套属性。模型 B 条目的数量以及是否需要条目取决于数据库中的第三个表。我使用 form_for 为模型 B 条目生成带有 fields_for 的表单。这就是验证的工作方式:
- 如果模型 B 对应的
:required字段为 false,则允许为空,但不应保存,即该条目不应引发验证错误,而应被:reject_if拒绝。李> -
:required字段为真的条目不允许为空。这些条目不应被:reject_if拒绝,但在将其保存到 db 时会引发验证错误。class modelA < ApplicationRecord has_many :modelBs, dependent: :destroy accepts_nested_attributes_for :modelBs, reject_if: :not_required_and_blank? def not_required_and_blank? # return true if modelB.entry is blank && modelB.required_entry? is false end end class modelB < ApplicationRecord belongs_to :modelA validates :modelB_entry, presence: true, if: :required_entry? def required_entry? ModelC.find(:id).required end end
我应该这样做吗
- 在
accepts_nested_attributes_for的:reject_if选项中(在modelA 类中)和validates_presence_of modelB_entry方法中(在modelB 类中)或 -
:reject_if中的所有内容或 -
:validates_presence_of中的所有内容?
先执行哪个:reject_if 或 vaildation?
【问题讨论】:
标签: ruby-on-rails validation nested-forms activemodel