Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails模型验证属性的互斥性_Ruby On Rails_Rails Activerecord - Fatal编程技术网

Ruby on rails Rails模型验证属性的互斥性

Ruby on rails Rails模型验证属性的互斥性,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,我有一个EventType模型,我想确保该模型只有以下属性之一(如果有的话):points\u required或percentage\u required 为了澄清,始终需要使用name所需分数不是必需的,出席率也不是必需的。但是,如果提交这两份文件中的任何一份,则只有一份可以出席 我只能找到其他几个类似的问题,但没有一个是有用的 到目前为止,这是我在EventType模型中的内容: validates :name, presence: true, length: { maximum: 50

我有一个
EventType
模型,我想确保该模型只有以下属性之一(如果有的话):
points\u required
percentage\u required

为了澄清,始终需要使用
name
<代码>所需分数不是必需的,出席率也不是必需的。但是,如果提交这两份文件中的任何一份,则只有一份可以出席

我只能找到其他几个类似的问题,但没有一个是有用的

到目前为止,这是我在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? }
这可以确保每个字段的格式正确。但是,如果一个模型同时保存了
所需的出席率
所需的点数
值,它仍然通过验证,这不是我想要的


有什么建议吗?

我相信您可以将这些结合到现有的验证中,以使事情干涸,但是
验证\u缺少\u
是您需要的

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? }

杰出的谢谢这对我有用。实际上,rails 4中的
:缺位
不过:@AlexVallejo Fat指了指的是“U of”。固定的。谢谢