加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在救援中添加模型验证错误

发布时间:2020-12-17 03:51:21 所属栏目:百科 来源:网络整理
导读:我有以下带有虚拟属性的模型 class Mytimeperiod ActiveRecord::Base validates presence of :from_dt validates_format_of :from_dt,:with = /Ad{2}/d{2}/d{4}Z/,:message = "format is mm/dd/yyyy" def from_dt self.from_date.strftime("%m/%d/%Y"
我有以下带有虚拟属性的模型

class Mytimeperiod < ActiveRecord::Base
  validates presence of :from_dt
  validates_format_of :from_dt,:with => /Ad{2}/d{2}/d{4}Z/,:message => "format is mm/dd/yyyy"

  def from_dt
     self.from_date.strftime("%m/%d/%Y") if !self.from_date.blank?
  end

  def from_dt=(from_dt)
    self.from_date = Date.parse(from_dt)
  rescue
    self.errors.add_to_base("invalid from dt")
  end
end

我正在使用<%= f.error_messages%>在窗体上显示错误消息.

我使用from_dt作为虚拟属性(字符串).表单上显示’存在’和’格式’验证错误,但是当用户在表单上输入无效的日期格式并且Date.Parse引发异常时,我在rescue子句中有’errors.add_to_base’语句.任何人都可以告诉我为什么当我禁用’格式’验证时,此错误不会出现在表单错误消息中.

谢谢.

解决方法

运行验证时,将删除在验证回调之外添加的错误 –
ActiveModel

因此,您必须在验证回调中添加错误,而不是在setter中添加.这应该工作:

class Mytimeperiod < ActiveRecord::Base
  validates presence of :from_dt
  validates_format_of :from_dt,:message => "format is mm/dd/yyyy"

  validate :from_dt_must_parse

  def from_dt
     self.from_date.strftime("%m/%d/%Y") if !self.from_date.blank?
  end

  def from_dt=(from_dt)
    self.from_date = Date.parse(from_dt)
  rescue
    @from_dt_parse_error = "not recognizable as a date"
  end

  def from_dt_must_parse
    self.errors[:from_dt] = @from_dt_parse_error
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读