3

我正在寻找一种最佳实践/解决方案来呈现不同的http响应代码响应超过422 - 不可处理的实体。Rails验证错误消息:将响应代码添加到默认验证程序

我有一个简单的验证:

validates :name, presence: true, uniqueness: {message: 'duplicate names are not allowed!'} 

我想返回状态代码409 - 冲突(:冲突)时,此验证失败。可能的解决方案:

  1. 将状态码添加到错误散列,例如, errors.add(status_code: '409')。然后,从错误中呈现状态代码,如果存在多个,则呈现422。

上述解决方案的问题是我不知道如何调用errors.add函数在'标准'验证器上。

我的渲​​染代码:

if model.save 
    render json: model, status: :created 
    else 
    render json: model.errors, status: :unprocessable_entity 
    end 

,我想向程度,它可以呈现根据验证结果不同的状态代码。

+0

为什么不是你,而不是渲染JSON,回报“头:冲突”? –

+0

@MaximFedotov如果这个休息api服务器纯粹处理休息电话的工作。它不需要渲染任何图形,只是一些指定的json结构;) –

回答

1

在这种情况下,创建自定义的验证可能是一个办法,你总是可以扩大复杂性

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