我有一组代表用户生日的选择输入:出生年份、出生月份和生日。我想像这样验证出生年份:
validates_inclusion_of :birthyear, :in => Date.today.year-50..Date.today.year-12
因此,用户注册时的年龄可以至少为 12 岁,但最多为 50 岁。
我的问题是输入的变量是字符串而不是整数。
那么如何将输入转换为整数呢?有没有更简单的方法来检查用户年龄?
听起来你已经定义了birthyear
数据库列作为字符串。 Rails 会在分配时将输入参数转换为适当的类型。所以user.new(params[:user])
会保存birthyear
在定义的类型中购买数据库列类型。
如果您无法将 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 位数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)