我想在Ruby on Rails中验证模型中的日期,但是,日期,月份和年份值在到达我的模型时已经转换为不正确的日期 .
例如,如果我在我的视图中输入2009年2月31日,当我在我的控制器中使用 Model.new(params[:model])
时,它会将其转换为"March 3rd 2009",然后我的模型将其视为有效日期,但它不正确 .
我希望能够在我的模型中进行此验证 . 我有什么方法可以,或者我是否完全错了?
我发现这个“Date validation”讨论了这个问题,但它从未得到解决 .
9 回答
我'm guessing you'使用
date_select
帮助器生成日期的标签 . 另一种方法是对日,月,年字段使用select form helper . 像这样(我使用的例子是created_at日期字段):在模型中,您验证日期:
如果你're looking for a plugin solution, I' d签出validates_timeliness插件 . 它的工作原理如下(来自github页面):
可用的验证方法列表如下:
使用慢性宝石:
如果您想要Rails 3或Ruby 1.9兼容性,请尝试使用date_validator gem .
Active Record为您提供
_before_type_cast
属性,这些属性在类型转换前包含原始属性数据 . 这对于返回具有类型转换前值的错误消息或仅进行类型转换后不可能的验证非常有用 .我会回避Daniel Von Fange关于覆盖访问器的建议,因为在访问器中进行验证会略微改变访问者协议 . Active Record具有明确适用于此情况的功能 . 用它 .
由于您需要在将日期字符串转换为模型中的日期之前处理日期字符串,因此我将覆盖该字段的访问者
假设您的日期字段为
published_date
. 将其添加到模型对象:这是一个非慢性的答案..
这里有点晚了,但多亏了“How do I validate a date in rails?”我设法编写了这个验证器,希望对某人有用:
你的
model.rb
里面您可以像这样验证日期和时间(如果您使用自定义选择,在控制器中的某个方法中可以访问您的参数)...
你试过validates_date_time插件吗?