我有一组代表用户生日的选择输入: birthyear、birthmonth和birthmonth。我想像这样验证birthyear:
validates_inclusion_of :birthyear, :in => Date.today.year-50..Date.today.year-12
因此,当用户注册时,他们可以至少12岁,但最多50岁。
我的问题是来自输入的变量是一个字符串,而不是一个整数。
那么,如何将输入转换为整数呢?有没有更简单的方法来检查用户的年龄?
发布于 2010-04-21 18:36:27
听起来您已经将birthyear
db列定义为字符串。Rails将在分配时将inut参数转换为适当的类型。因此,user.new(params[:user])
会将birthyear
保存为定义为购买db列类型的类型。
如果您不能将db列更改为整数,那么可以尝试创建一个有效字符串数组。
validates_inclusion_of :birthyear,
:in => (Date.today.year-50..Date.today.year-12).map(&:to_s)
现在,请记住,在生产中,模型类可能会被缓存,在重新启动之前,您可能会遇到新的一年的日期范围错误的情况。
我会将其添加到验证函数中,而不使用包含验证来防止这种情况。
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位数的年份。
https://stackoverflow.com/questions/2685226
复制相似问题