簡體   English   中英

Rails驗證錯誤消息:將響應代碼添加到默認驗證器

[英]Rails validation error messages: Add response code to default validators

我正在尋找一個最佳實踐/解決方案來呈現響應不同的http響應代碼而不是422 - 不可處理的實體。

我有一個簡單的驗證器:

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

我想擴展它可以根據驗證結果呈現不同的狀態代碼。

在這種情況下,創建自定義驗證器可能是一種方法,您可以始終擴展復雜性

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM