下面是我正在处理的Rails项目的代码片段:
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.')
endActiveRecord::Error类和活动记录验证指南的文档都解释了message,但都没有解释type。什么是type,它对验证错误有什么影响,在哪里有文档记录?
发布于 2022-02-02 15:33:57
https://api.rubyonrails.org/classes/ActiveModel/Errors.html包含有关它的一些信息:
add(属性,类型=:无效,**选项)在
attribute上添加了一个新的attribute错误。可以将多个错误添加到同一个attribute中。如果没有提供type,则假定为:invalid。
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)。
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选项也可以设置为任何其他异常。
https://stackoverflow.com/questions/70958097
复制相似问题