gpt4 book ai didi

ruby-on-rails - 创建自定义验证器

转载 作者:数据小太阳 更新时间:2023-10-29 08:32:58 24 4
gpt4 key购买 nike

我有验证器,它验证表单上的一个字段。具有类 ActiveSupport::TimeWithZone

的字段返回值
validate :begins_at_not_in_past

def begins_at_not_in_past
return unless self.state == 'Scheduled'
if self.begins_at != nil && self.begins_at < (Time.now - 1.hour)
errors.add(:begins_at, 'Action cannot begin in past')
false
end

end

如果验证失败,它会显示我的错误,但是它确实会在数据库中创建新记录,即使表单中的数据无效。我哪里弄错了?

最佳答案

您应该有以下行。否则它不会给对象添加错误。所以添加以下带有 errors.add 的行

validate :begins_at_not_in_past

def begins_at_not_in_past
return unless self.state == 'Scheduled'
if self.begins_at != nil && self.begins_at < (Time.now - 1.hour)
errors.add(:begins_at, 'Action cannot begin in past')
errors[:base] << 'Correct errors' # Rails 2.3.X errors.add_to_base('msg')
false
end
end

在 Controller 中:#Validation 仅在您调用 valid 时运行?方法

if obj.valid?
#do something
else
flash[:error] = obj.errors.full_messages.join('<br/>')
end

关于ruby-on-rails - 创建自定义验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14587305/

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