Rails模型验证属性的互斥性

时间:2014-11-29 01:21:31

标签: ruby-on-rails rails-activerecord

我有EventType模型,我希望确保只有以下属性之一:points_requiredpercentage_attendance_required

为了澄清,始终需要namepoints_required不是必需的,也不是percentage_attendance_required。但是,如果提交了这两个中的任何一个,则只能有一个。

我只能找到与此相似的其他几个问题,但没有一个问题对我们有帮助。

到目前为止,这是我在EventType模型中的内容:

validates :name, presence: true, length: { maximum: 50 }
validates :points_required, presence: true, length: {maximum: 2},
           numericality: { only_integer: true },
           if: Proc.new { |e| e.percentage_attendance_required.blank? }
validates :percentage_attendance_required, presence: true,
          length: {maximum: 3}, numericality: { only_integer: true },
          if: Proc.new { |e| e.points_required.blank? }

这可以确保每个字段的格式正确。但是,如果使用percentage_attendance_requiredpoints_required值保存模型,它仍会通过验证,这不是我想要的。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我确定您可以将这些内容合并到现有的验证中,但是validates_absence_of是您正在寻找的内容。

validates :points_required, absence: true, 
          if: Proc.new { |e| e.percentage_attendance_required.present? }

validates :percentage_attendance_required, absence: true, 
          if: Proc.new { |e| e.points_required.present? }