Rails 验证错误消息:将响应代码添加到默认验证器
Rails validation error messages: Add response code to default validators
我正在寻找最佳实践/解决方案来呈现具有与 422 不同的 http 响应代码的响应 - 不可处理的实体。
我有一个简单的验证器:
validates :name, presence: true, uniqueness: {message: 'duplicate names are not allowed!'}
我想 return 验证失败时状态代码 409 - 冲突 (:conflict)。可能的解决方案:
- 将状态代码添加到错误散列中,例如
errors.add(status_code: '409')
。然后从错误中呈现状态代码,或者如果存在多个则呈现 422。
上述解决方案的问题是我不知道如何在 'standard' 验证器上调用 errors.add
函数。
我的渲染代码:
if model.save
render json: model, status: :created
else
render json: model.errors, status: :unprocessable_entity
end
我希望它能够根据验证结果呈现不同的状态代码。
在这种情况下,创建自定义验证器可能是一种方法,您总是可以扩展复杂性
validates_with NameValidator
自定义验证器
class NameValidator < ActiveModel::Validator
def validate(record)
if record.blank? || Model.where(name: record.name).exists?
record.errors.add(:base, "Duplicate names not allowed!")
end
end
end
我正在寻找最佳实践/解决方案来呈现具有与 422 不同的 http 响应代码的响应 - 不可处理的实体。
我有一个简单的验证器:
validates :name, presence: true, uniqueness: {message: 'duplicate names are not allowed!'}
我想 return 验证失败时状态代码 409 - 冲突 (:conflict)。可能的解决方案:
- 将状态代码添加到错误散列中,例如
errors.add(status_code: '409')
。然后从错误中呈现状态代码,或者如果存在多个则呈现 422。
上述解决方案的问题是我不知道如何在 'standard' 验证器上调用 errors.add
函数。
我的渲染代码:
if model.save
render json: model, status: :created
else
render json: model.errors, status: :unprocessable_entity
end
我希望它能够根据验证结果呈现不同的状态代码。
在这种情况下,创建自定义验证器可能是一种方法,您总是可以扩展复杂性
validates_with NameValidator
自定义验证器
class NameValidator < ActiveModel::Validator
def validate(record)
if record.blank? || Model.where(name: record.name).exists?
record.errors.add(:base, "Duplicate names not allowed!")
end
end
end