如果存在多个属性,如何验证是否存在?

时间:2014-04-02 21:40:34

标签: ruby-on-rails

我们说我有一个模型Foobar

Foobar可以具有如下属性:

  create_table "foobars" do |t|
    t.integer   "a"
    t.integer   "b"
    t.integer   "c"
  end

在创建新foobars的表单中,用户可以为 a,b或c 添加数字。但是,如果他们输入任何这些属性的数字,那么所有其他属性也必须输入。换句话说,如果定义了a,我需要检查bc是否也已定义。

2 个答案:

答案 0 :(得分:0)

您可以在验证方法中评估以下语句:

(a && b && c) || (!a && !b && !c)

只有当所有这些都存在或者所有这些都是零时才评估为真。

答案 1 :(得分:0)

更新: 我建议conditional validation。你可以这样做:

class Foobar < ActiveRecord::Base
  validates :a, presence: true, if: :interdependent_attributes_present?
  validates :b, presence: true, if: :interdependent_attributes_present?
  validates :c, presence: true, if: :interdependent_attributes_present?

  def interdependent_attributes_present?
    a.present? || b.present || c.present?
  end
end