我有一组代表用户生日的选择输入:生日、生日和生日我想这样确认生日:

  validates_inclusion_of :birthyear, :in => Date.today.year-50..Date.today.year-12

因此,用户可以至少12年,但最多50年时,他们注册。
我的问题是输入的变量是字符串而不是整数。
那么,如何将输入转换为整数呢有没有更简单的方法来检查用户年龄?

最佳答案

听起来您已经将birthyeardb列定义为字符串。Rails将在分配时将inut参数转换为适当的类型因此user.new(params[:user])将在定义的类型buy the db column type中保存birthyear
如果无法将db列更改为整数,请尝试创建有效字符串数组。

validates_inclusion_of :birthyear,
  :in => (Date.today.year-50..Date.today.year-12).map(&:to_s)

现在,请记住,在生产中,模型类可能会被缓存,并且在重新启动之前,您可能会遇到新年日期范围错误的情况。
我将在validate函数中添加这个,而不使用包含验证来防止这种情况。
def validate
  current_year = Date.today.year
  if birthyear && (birthyear.to_i <= current_year - 50 || birthyear.to_i >= current_year - 12)
    errors.add(:birthyear, "must be between 12 and 50 years of age")
  end
end

现在,所有这些都假设输入是4位数的年份。

09-25 21:30