Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.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 基于可能更改的变量验证字段_Ruby On Rails_Validation_Date_Activerecord - Fatal编程技术网

Ruby on rails 基于可能更改的变量验证字段

Ruby on rails 基于可能更改的变量验证字段,ruby-on-rails,validation,date,activerecord,Ruby On Rails,Validation,Date,Activerecord,我正在尝试验证出生日期字段,该字段必须在一定范围内: validates :year_of_birth, :inclusion => { :in => 1900..Date.today.year - 5 } 虽然对于这种情况,它不会造成这么大的问题,但我意识到这只适用于每次重新加载模型,从而再次计算当前年份的开发 在生产过程中,我如何避免这种情况,比如说,在今年年初,范围的右端与前一年一样?在这种情况下,我建议您进行自定义验证 validate :validates_year_of

我正在尝试验证出生日期字段,该字段必须在一定范围内:

validates :year_of_birth, :inclusion => { :in => 1900..Date.today.year - 5 }
虽然对于这种情况,它不会造成这么大的问题,但我意识到这只适用于每次重新加载模型,从而再次计算当前年份的开发


在生产过程中,我如何避免这种情况,比如说,在今年年初,范围的右端与前一年一样?

在这种情况下,我建议您进行自定义验证

validate :validates_year_of_birth

def validates_year_of_birth
  five_years_ago = 5.years.ago.year
  if year_or_birth && (year_of_birth < 1990 || year_of_birth > five_years_ago)
    errors.add :year_of_birth, "should be between 1990 and #{five_years_ago}"
  end
end

非常感谢你。我选择proc方式是因为对于我想要实现的目标来说,它似乎是一个更苗条的解决方案。感谢您让我知道定制验证器的存在!
validates :year_of_birth, :inclusion => { :in => proc { 1900..5.years.ago.year } }