如果我的日期不存在或格式不正确,如何防止 strptime 抛出错误?

How do I prevent strptime from throwing an error if my date isn't present or in the right format?

我正在使用 Rails 4.2.3。在我的控制器中,当我要保存一个实体时,我有这个

    @date = Date.strptime(my_object_params[:day], "%m/%d/%Y")
    @my_object.day = @date
        respond_to do |format|
      if @my_object.save

不幸的是,如果没有包含参数或者它与格式不匹配,我会得到这个错误

ArgumentError (invalid date):
  app/controllers/my_objects_controller.rb:33:in `strptime'
  app/controllers/my_objects_controller.rb:33:in `create'

如果格式不正确,如何防止 Rails 死机?我已将此验证规则包含在我的模型中,尽管我认为它还没有达到那个阶段,因为我的“保存”直到稍后在方法中才被调用……

  validates_presence_of :day

我建议你简单地添加一些错误处理的情况。类似于:

@date = Date.strptime(my_object_params[:day], "%m/%d/%Y") rescue nil

然后处理@date为nil的情况。

尝试更具体地处理错误?

begin
  @date = Date.strptime(my_object_params[:day], "%m/%d/%Y")
rescue ArgumentError => ae
  #do something rational and valid
end