2013-10-30 4 views
9

In Schienen activerecord Validierung, normalerweise, wenn eine Validierung fehlschlägt, wird es eine Fehlermeldung im Attribut Fehler der Modelle hinzufügen, aber unsere Kunden fordert einen Fehlercode zusätzlich zur Fehlermeldung, zum Beispiel haben wir ein Bill-Modell, mit msisdn-Attribut, wenn msisdn null ist, lautet der Fehlercode 101, wenn msisdn nicht im MSISDN-Format reklamiert, der Fehlercode 102 ist, wenn der Client eine Anforderung über die REST-Schnittstelle sendet, und wenn die Validierung fehlschlägt, wir sollten ein jSON-Objekt wieGibt es eine Möglichkeit, Fehlercode zusätzlich zur Fehlermeldung in Schienen aktive Datensatzvalidierung zurückzugeben?

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

zurückkehren gibt es eine Möglichkeit active~~POS=TRUNC zu sagen, einen Fehlercode zusätzlich zu generieren zu Fehlermeldungen? Danke vielmals.

Antwort

4

errors ist nur ein einfacher Hash, wobei der Schlüssel das Attribut darstellt, das einen Fehler aufweist, und der Wert die Fehlermeldung darstellt. Ihre Anforderung ist technisch möglich, indem Sie die Textnachricht durch einen Hash ersetzen. Aber der Nachteil ist, dass Sie möglicherweise mehr Dinge tun müssen, um die Fehler im neuen Format zu zeigen.

Verwenden Sie zum Beispiel einen benutzerdefinierten Validator Fehlercode

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 

Dann ist es

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 
zum Hinzufügen

So können Sie es verwenden. Aber Sie müssen mehr arbeiten, wenn Sie die Fehler korrekt anzeigen müssen, z. B. Fehler in einem Formular anzeigen, da dies keine Konvention ist.

+0

Das erste, was in den Sinn kommt, ist "full_messages" wird brechen – fatuhoku

6

Schienen 5 enthalten eine ähnliche Funktion mit foo.errors.details. Sie können dies leicht verwenden, um bessere API-Fehler zu erstellen.

Wenn Sie Code-Fehler als Zahlen bevorzugen, können Sie die Zahlen einfach mit den Fehlerschlüsseln abgleichen.

Für Schienen 3 & 4 können Sie dieses Juwel verwenden https://github.com/cowbell/active_model-errors_details Hexe ist das gleiche Feature rückportiert.

Verwandte Themen