【问题标题】:Rails validation error messages: Add response code to default validatorsRails 验证错误消息:将响应代码添加到默认验证器
【发布时间】:2017-12-31 10:33:14
【问题描述】:

我正在寻找一种最佳实践/解决方案来呈现具有不同 http-response 代码而不是 422 - 不可处理实体的响应。

我有一个简单的验证器:

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

我想在验证失败时返回状态码 409 - Conflict (:conflict)。可能的解决方案:

  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

我想扩展它可以根据验证结果呈现不同的状态代码。

【问题讨论】:

  • 你为什么不渲染一个json,而是返回head :conflict
  • @MaximFedotov 如果这个 rest api 服务器纯粹是处理 rest 调用,那么这项工作。它不需要渲染任何图形,只需要一些指定的 json 结构;)

标签: ruby-on-rails ruby validation ruby-on-rails-5 http-status-codes


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-18
    • 2021-12-30
    • 2011-04-18
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多