Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails验证错误消息:向默认验证器添加响应代码_Ruby On Rails_Ruby_Validation_Ruby On Rails 5_Http Status Codes - Fatal编程技术网

Ruby on rails Rails验证错误消息:向默认验证器添加响应代码

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”)。然后从错误中呈现状态代码,如果存在多个

我正在寻找一个最佳实践/解决方案,以呈现与422-不可处理实体不同的http响应代码的响应

我有一个简单的验证器:

validates :name, presence: true, uniqueness: {message: 'duplicate names are not allowed!'}
当验证失败时,我想返回状态代码409-Conflict(:Conflict)。可能的解决办法:

  • 将状态代码添加到错误哈希,例如
    错误。添加(状态代码:“409”)
    。然后从错误中呈现状态代码,如果存在多个,则呈现422
  • 上述解决方案的问题是,我不知道如何调用
    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
    
    classnameValidator
    如果此rest api服务器纯粹处理rest调用,为什么不返回作业而不是呈现json呢。它不需要呈现任何图形,只需要一些指定的json结构;)