在保存在rails中之前将输入转换为整数

我有一组表示用户生日的选择输入:birthyear,birthmonth和birthday。 我想validation这样的birthyear:

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

因此,用户注册时可以至少12年但最多50年。

我的问题是来自输入的变量是一个字符串而不是整数。

那么如何将输入转换为整数? 有没有更简单的方法来检查用户年龄?

听起来你已经将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) 

现在,请记住,在生产中,模型类可能会被缓存,并且您可能会遇到新的一年中日期范围错误的情况,直到您重新启动。

我会在validate函数中添加它,而不是使用包含validation来防止这种情况。

 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位数年份。