我有一组表示用户生日的选择输入:birthyear,birthmonth和birthday。我想像这样验证birthyear:
validates_inclusion_of :birthyear, :in => Date.today.year-50..Date.today.year-12
因此,用户注册时可以至少12年但最多50年。
我的问题是来自输入的变量是一个字符串而不是一个整数。
那么如何将输入转换为整数?有没有更简单的方法来检查用户的年龄?
答案 0 :(得分:1)
听起来您已将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位数。