0

我在 Rails 中创建了一个 REST API,但只是更新。我想要做的是能够传入时间戳并用结果更新记录。

我只是在利用

@my_class = MyClass.find(params[:id])

@my_class.update_attributes!(params)

这可以按预期正常工作,但是当传入一个值时说'2013-07-08 20:00'我想抛出一个错误的请求,因为我只想要格式的日期'yyyy-mm-dd hh:mm:ss'

当前的默认行为是悄悄地将该字段设置为空。什么是最好的让它抛出错误呢?我试过做 avalidate_format_of但是因为它被设置为 null 它只是验证 null 而不是正在提交的值。

显然我可以检查参数,但我希望有更优雅的东西。

4

2 回答 2

0

我认为这Time#parse是比正则表达式匹配更好的解决方案。当字符串可以成功解析时,这将返回一个 Time 对象:

>> Time.parse("'2013-07-08 20:00'")
=> 2013-07-08 20:00:00 -0400

当无法解析字符串时,会引发错误:

>> Time.parse("meow")
ArgumentError: no time information in "meow"

这不完全符合您的规范,因为某些字段不是必需的。例如,这不会引发错误。

>> Time.parse('2013-07-08')
=> 2013-07-08 00:00:00 -0400

解析时间和格式化输出应该满足您的要求。当未提供 hh:mm:ss 时,这将正确评估为 false:

>> str = '2013-07-08'
=> "2013-07-08"
>> Time.parse(str).to_formatted_s(:db) == str
=> false

当提供 hh:mm:ss 时,它将评估为 true:

>> str = '2013-07-08 20:00:45'
=> "2013-07-08 20:00:45"
>> Time.parse(str).to_formatted_s(:db) == str
=> true
于 2013-07-25T00:19:34.970 回答
0

你确定 allow_blank 和 allow_nil 都是假的吗?

validates_format_of :my_time_stamp, with: /[0-9]{1,4}/[0-9]{1,2}/[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}/, :allow_nil => false, :allow_blank => false
于 2013-07-24T23:36:56.207 回答