3

私は、422以上の異なるhttp-responseコードでレスポンスをレンダリングするためのベストプラクティス/ソリューションを探しています。この検証が失敗したとき:(競合) - 紛争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

'頭部:葛藤'? –

+0

@ MaximFedotovこの残りのAPIサーバが純粋に休憩コールを処理している場合のジョブ。グラフィカルなもの、特定のjson構造をレンダリングする必要はありません;) –

答えて

1

、カスタムバリデータを作成することは、1つのアプローチであるかもしれない、あなたは常に複雑性を広げることができ

validates_with NameValidator 

カスタムバリデータ、あなたの代わりにJSON、リターンをレンダリングしていないのはなぜ

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 
関連する問題