听起来像您已将birthyear
db列定义为字符串。 Rails将在分配时将inut参数转换为适当的类型。因此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位数字的一年。
您是否收到验证错误,此规则或者一些其他错误? api文档显示验证一个年龄段,没有提到需要任何转换。 – Corey 2010-04-21 18:38:07