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

Rails 4 active record validation - Conditionally validate interdependent presence of 4 attributes

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

其中我有 4 个属性,我需要应用我所谓的 "mutually conditional presence" Active Record 验证。 这些属性是

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

到目前为止我只能说,如果用户填写了第一个属性 "address line 1",那么其他所有属性都必须存在。

但它并不能验证所有可能组合中的所有 MUTUAL 存在。例如,如果用户让 'address line 1' 为空但填写邮政编码并将其他三个留空,我希望活动记录不要验证表单,因为他应该被要求填写其他三个属性。依此类推。

如何操作?

这是我当前的代码

spec/models/users

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}  

只需将 :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