Rails 4活动记录验证 - 有条件地验证4个属性的相互依赖性

时间:2015-05-23 16:35:26

标签: ruby-on-rails ruby-on-rails-4 activerecord rails-activerecord

我有一个包含10个属性的表单。

其中我有4个属性,我需要应用我称之为“互为条件存在”的Active Record验证。 这些属性是

  • 地址行
  • 邮政编码
  • 状态
  • 国家

这意味着如果用户填写其中一个,那么所有其他人必须在场

到目前为止,我只能说,如果用户填写第一个属性“地址行1”,那么所有其他属性必须存在。

但它没有验证所有可能组合中的所有MUTUAL存在。例如,如果用户让“地址行1”为空但填充了zipcode并将其他三个留空,我希望活动的不再验证表单,因为他应该被要求填写其他三个属性。等等每个属性。

怎么做?

这是我当前的代码

规格/模型/用户

validates :address_line_1,
              presence: true,
              length: { maximum: 100,
                        minimum: 3 }
  validates :zipcode,
              presence: true, if: :address_line_1?,
              length: { maximum: 20,
                        minimum: 4} 
  validates :state,
              presence: true, if: :address_line_1?,                  
  validates :country,
              presence: true, :address_line_1?,                  
              length: { maximum: 50}  

1 个答案:

答案 0 :(得分:6)

只需检查其中一个填写的字段即可替换:address_line?条件:

  validates :address_line_1,
              presence: true, if: :address_entered?,
              length: { maximum: 100,
                        minimum: 3 }
  validates :zipcode,
              presence: true, if: :address_entered?,
              length: { maximum: 20,
                        minimum: 4


 validates :state,
              presence: true, if: :address_entered?,
  validates :country,
              presence: true, if: :address_entered?,
              length: { maximum: 50}

  def address_entered?
    address_line_1.present? || zipcode.present? || state.present? || country.present?
  end