如何在Grape中的params格式化DateTime

时间:2016-04-16 04:04:19

标签: ruby-on-rails ruby grape

有时我们需要接受来自客户的DateTime

params do
   requires :time_to_arrive, type: DateTime, allow_blank: false
end

如果我们在控制台DateTime.now中写字,它默认会以这种格式提供:

Sat, 16 Apr 2016 09:59:26 +0600

是否可以指定葡萄中接受DateTime的格式?

2 个答案:

答案 0 :(得分:0)

尝试创建自定义类型:

class MyDateTime
  attr_reader :value
  def initialize(datetime)
    @value = datetime
  end

  def self.parse(value)
    my_date_format = '%Y-%m-%dT%H:%M:%S%z'
    dt = DateTime.strptime(value, my_date_format)
    new(dt)
  end
end


requires :time_to_arrive, type: MyDateTime, allow_blank: false

答案 1 :(得分:0)

尝试coerce_with选项:

params do
   requires :time_to_arrive, type: DateTime, coerce_with: DateTime.method(:iso8601), allow_blank: false
end

同样在调用API时,您可以使用your_date_time_var.iso8601指定iso8601格式。