【发布时间】:2015-05-23 22:39:10
【问题描述】:
我有一个包含 10 个属性的表单。
其中我有 4 个属性,我需要应用我称之为“相互条件存在”的 Active Record 验证。
我想要那个
- (A) 如果至少有一个存在,那么其他 3 个必须存在
- (B) 仍然允许不存在(如果其他 3 个为空白,则第四个有权为空白)
以下是四个属性:
- address_line_1
- 邮政编码
- 状态
- 国家
这意味着如果用户填写其中一个,那么所有其他人都必须在场。但如果都是空白,也可以。
到目前为止,我只能设法执行 (A)。但我未能实施(B)。
确实,当我尝试将 allow_blank: true 放在 4 个属性之一验证时,它会中断 (A) ,因为在那之后,它不能确保如果存在一个属性,其他属性也必须存在。
如何做到这一点?
这是我当前的代码
规格/型号/用户
validates :address_line_1,
presence: true, if: :pa_subelements_mutual_presence?
length: { maximum: 100,
minimum: 3 }
validates :zipcode,
presence: true, if: :pa_subelements_mutual_presence?,
length: { maximum: 20,
minimum: 4}
validates :state,
presence: true, if: :pa_subelements_mutual_presence?,
validates :country,
presence: true, if: :pa_subelements_mutual_presence?,
length: { maximum: 50}
private
def pa_subelements_mutual_presence? # method to help set validates on mutually dependent for presence for postal address
lambda { self.address_line_1.present? } ||
lambda { self.zipcode.present? } ||
lambda { self.state.present? } ||
lambda { self.country.present? }
end
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 activerecord rails-activerecord