非法日期 argument out of range错误

transcosmos 2015-09-10 09:21:26
现象:
画面上有个text框,对应的字段在数据库里是datetime类型的(数据库是postgresql),对该text框也进行了validation验证。
但是输入非法日期2015/02/31,validation能正常check出来,只要是日期超过31号,就会报错argument out of range。

①view:
<%= f.text_field :uketori_date, class: "datepicker", maxlength: "10", style: "ime-mode:disabled;width:100px;" %>

②controller:

def create
@keiyakusho = Keiyakusho.new(keiyakusho_params) #<------- 就是这句话报错
respond_to do |format|
if @keiyakusho.save
format.html { redirect_to mainmenus_path, notice: I18n.t('msg.ICMN002', arg: I18n.t('models.keiyakusho')) }
else
format.html { render :new }
end
end
end

def keiyakusho_params
params.require(:keiyakusho).permit(:uketori_date, ……)
end


③model:
validates :uketori_date_before_type_cast, :date_format => { :attr_base => :uketori_date},
:allow_blank => true

④validation:
date_format_validator.rb:

class DateFormatValidator < ActiveModel::EachValidator
def validate_each(record, attr, value)
check_val = value.to_s.gsub(/-/,"/")

unless /^(\d{4})\/(\d{1,2})\/(\d{1,2})$/ =~ check_val
record.errors.add(options[:attr_base],"#{I18n.t('msg.ECMN010', arg: "")}")
return
end

split_date = check_val.split('/');
if Date.valid_date?(split_date[0].to_i,split_date[1].to_i,split_date[2].to_i) == false
record.errors.add(options[:attr_base],"#{I18n.t('msg.ECMN010', arg: "")}")
end

end
end
...全文
9122 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
transcosmos 2016-03-03
  • 打赏
  • 举报
回复
确实这样,我也遇到过这个问题,后来放弃了model层的validation check,改在controller层手动写代码进行check

      if keiyakusho_params[param_name].present?
        if (DateTime.parse(keiyakusho_params[param_name]) rescue ArgumentError) == ArgumentError then
          @keiyakusho.errors.add(param_name, "#{I18n.t('msg.ECMN010', arg: "")}")
        end
      end
PyTorch版的YOLOv5是轻量而高性能的实时目标检测方法。利用YOLOv5训练完自己的数据集后,如何向大众展示并提供落地的服务呢?   本课程将提供相应的解决方案,具体讲述如何使用Web应用程序框架Flask进行YOLOv5的Web应用部署。用户可通过客户端浏览器上传图片,经服务器处理后返回图片检测数据并在浏览器中绘制检测结果。   本课程的YOLOv5使用ultralytics/yolov5,在Ubuntu系统上做项目演示,并提供在Windows系统上的部署方式文档。 本项目采取前后端分离的系统架构和开发方式,减少前后端的耦合。课程包括:YOLOv5的安装、 Flask的安装、YOLOv5的检测API接口python代码、 Flask的服务程序的python代码、前端html代码、CSS代码、Javascript代码、系统部署演示、生产系统部署建议等。   本人推出了有关YOLOv5目标检测的系列课程。请持续关注该系列的其它视频课程,包括:《YOLOv5(PyTorch)目标检测实战:训练自己的数据集》Ubuntu系统 https://edu.csdn.net/course/detail/30793 Windows系统 https://edu.csdn.net/course/detail/30923 《YOLOv5(PyTorch)目标检测:原理与源码解析》https://edu.csdn.net/course/detail/31428 《YOLOv5(PyTorch)目标检测实战:Flask Web部署》https://edu.csdn.net/course/detail/31087 《YOLOv5(PyTorch)目标检测实战:TensorRT加速部署》https://edu.csdn.net/course/detail/32303

2,763

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ruby/Rails
社区管理员
  • Ruby/Rails社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧