Ruby on rails Rails验证错误消息:向默认验证器添加响应代码
我正在寻找一个最佳实践/解决方案,以呈现与422-不可处理实体不同的http响应代码的响应 我有一个简单的验证器:Ruby on rails Rails验证错误消息:向默认验证器添加响应代码,ruby-on-rails,ruby,validation,ruby-on-rails-5,http-status-codes,Ruby On Rails,Ruby,Validation,Ruby On Rails 5,Http Status Codes,我正在寻找一个最佳实践/解决方案,以呈现与422-不可处理实体不同的http响应代码的响应 我有一个简单的验证器: validates :name, presence: true, uniqueness: {message: 'duplicate names are not allowed!'} 当验证失败时,我想返回状态代码409-Conflict(:Conflict)。可能的解决办法: 将状态代码添加到错误哈希,例如错误。添加(状态代码:“409”)。然后从错误中呈现状态代码,如果存在多个
validates :name, presence: true, uniqueness: {message: 'duplicate names are not allowed!'}
当验证失败时,我想返回状态代码409-Conflict(:Conflict)。可能的解决办法:
错误。添加(状态代码:“409”)
。然后从错误中呈现状态代码,如果存在多个,则呈现422errors.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
classnameValidator
如果此rest api服务器纯粹处理rest调用,为什么不返回作业而不是呈现json呢。它不需要呈现任何图形,只需要一些指定的json结构;)