gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:00:55 24 4
gpt4 key购买 nike

我有以下带有虚拟属性的模型

class Mytimeperiod < ActiveRecord::Base
validates presence of :from_dt
validates_format_of :from_dt, :with => /\A\d{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 引发异常时,我在救援子句中有一个“errors.add_to_base”语句.谁能告诉我为什么当我禁用“格式”验证时这个错误没有出现在表单错误消息中。

谢谢。

最佳答案

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

所以你必须在验证回调中添加你的错误,而不是在 setter 中。这应该有效:

class Mytimeperiod < ActiveRecord::Base
validates presence of :from_dt
validates_format_of :from_dt, :with => /\A\d{2}\/\d{2}\/\d{4}\Z/, :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

关于ruby-on-rails - 在救援中添加模型验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2588169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com