首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveRecord::Error.type如何影响验证错误消息?

ActiveRecord::Error.type如何影响验证错误消息?
EN

Stack Overflow用户
提问于 2022-02-02 15:13:34
回答 1查看 794关注 0票数 2

下面是我正在处理的Rails项目的代码片段:

代码语言:javascript
复制
if has_youtube && has_vimeo
  record.errors.add(:video_link, type: 'A project cannot have videos from both YouTube and Vimeo')
  return
end

if record.video_link.present?
  record.errors.add(:video_link, message: "This doesn't look like a valid YouTube or Vimeo link. Please try again.")
else
  record.errors.add(:video_link, :blank, message: 'You need to complete this field to register.')
end

ActiveRecord::Error类和活动记录验证指南的文档都解释了message,但都没有解释type。什么是type,它对验证错误有什么影响,在哪里有文档记录?

EN

Stack Overflow用户

回答已采纳

发布于 2022-02-02 15:33:57

https://api.rubyonrails.org/classes/ActiveModel/Errors.html包含有关它的一些信息:

add(属性,类型=:无效,**选项)在attribute上添加了一个新的attribute错误。可以将多个错误添加到同一个attribute中。如果没有提供type,则假定为:invalid

代码语言:javascript
复制
person.errors.add(:name)
# Adds <#ActiveModel::Error attribute=name, type=invalid>
person.errors.add(:name, :not_implemented, message: "must be implemented")
# Adds <#ActiveModel::Error attribute=name, type=not_implemented, options={:message=>"must be implemented"}>

person.errors.messages
# => {:name=>["is invalid", "must be implemented"]}

如果type是一个字符串,它将用作错误消息。 如果type是一个符号,它将使用适当的范围进行翻译(参见generate_message)。

代码语言:javascript
复制
person.errors.add(:name, :blank)
person.errors.messages
# => {:name=>["can't be blank"]}

person.errors.add(:name, :too_long, { count: 25 })
person.errors.messages
# => ["is too long (maximum is 25 characters)"]

如果type是一个proc,它将被调用,允许在错误中使用像Time.now这样的东西。 如果:strict选项设置为true,它将引发ActiveModel::StrictValidationFailed而不是添加错误。:strict选项也可以设置为任何其他异常。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70958097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档