13

Railsのactiverecord検証では、通常、検証が失敗すると、モデルのerrors属性にエラーメッセージが追加されますが、クライアントはエラーメッセージに加えてエラーコードを返すことを要求します。たとえば、Billモデルがあり、 msisdn 属性。msisdn が null の場合、エラー コードは 101 です。msisdn が MSISDN 形式に準拠していない場合、エラー コードは 102 です。クライアントが REST インターフェイスを介してリクエストを送信した場合、検証が失敗した場合は、のようなjsonオブジェクトを返します

bill: {
    error_code: 101,
    error_message: "msisdn can't be null"
}

エラーメッセージに加えてエラーコードを生成するようにactiverecordに指示する方法はありますか? どうもありがとう。

4

3 に答える 3

4

errorsキーはエラーのある属性を表し、値はエラーメッセージを表します。したがって、技術的には、テキスト メッセージをハッシュに置き換えることで要件を満たすことができます。ただし、欠点は、エラーを新しい形式で表示するために、さらに多くのことを行う必要がある場合があることです。

たとえば、カスタム バリデータを使用してエラー コードを追加します。

class Foo < ActiveRecord::Base
  attr_accessible :msiisnd
  validate :msiisdn_can_not_be_blank

  def msiisdn_can_not_be_blank
    if msiisdn.blank?
      errors.add(:msiisdn, {code: 101, message: "cannot be blank"})
    end
  end
end

それからそれを使用してください

foo = Foo.new
foo.errors.count
#=> 0
foo.valid?
#=> false
foo.errors.count
#=> 1
foo.errors[:msiisdn]
#=> [{ code: 101, message: "can not be blank"}]
foo.errors[:msiisdn][0][:code]
#=> 101

だからあなたはそれを使うことができます。ただし、エラーを正しく表示する必要がある場合、たとえばフォームにエラーを表示する必要がある場合は、より多くの作業を行う必要があります。これは規則ではないためです。

于 2013-10-30T03:33:38.170 に答える