2017-07-05 1 views
0

Ich möchte, dass die Reihenfolge der Validierungsnachrichten in der gleichen Reihenfolge wie in unserem Formular angezeigt wird.Kann ich die Reihenfolge der Validierungsfehlermeldungen in Rails ermitteln?

Wir haben drei Klassen:

class User 
    accepts_nested_attributes_for :pledges 
end 

class Pledge 
    accepts_nested_attributes_for :companies 
    validates_presence_of :pledgor_surname 
end 

class Company 
    validates_presence_of :name 
end 

In einer Form, wir potenziell für alle drei Attribute nehmen, so dass wir params wie folgt aus:

{"pledges_attributes"=> 
    {"0"=> 
    {"pledgor_surname"=>"", 
    "id"=>"230", 
    "companies_attributes"=> 
     {"0"=> 
     {"id"=>"125", 
     "name"=>"" 
     } 
     } 
    } 
    } 
} 

Als ich @user.update(params) nennen, es schlägt die Validierung fehl, wie ich es erwarten würde. Aber die errors#full_messages Liste sieht wie folgt aus:

["Company name can't be blank", "Pledgor surname can't be blank"]` 

Und die Fehler auf der Seite erscheinen in der gleichen Reihenfolge.

Kurz vor dem Hacken des Nachrichtenobjekts, gibt es eine Möglichkeit, den Rails mitzuteilen, in welcher Reihenfolge die Nachrichten platziert werden sollen, oder zumindest, welche von Pefgor-Fehlern und Unternehmensfehlern zuerst gehen sollten?

+1

Die #Full_Messages wandelt die Fehler in ein Array um, aber davor befinden sie sich in einem Hash-ähnlichen Objekt (siehe Abschnitt 'errors [] '[hier] (http://guides.rubyonrails.org/active_record_validations. html # validations-overview-errors)). Sie können also 'errors.values_at (: Name,: Nachname) .flatten' verwenden, um die Fehler in der gleichen Reihenfolge wie die angegebenen zu erhalten. –

+1

Beachten Sie, dass dies der wirklich alte Rails 3.x-Validierungsstil ist. Rails 4+ verwendet 'validates: pedgor_surname, presence: true' gemäß der [Dokumentation] (http://guides.rubyonrails.org/active_record_validations.html). – tadman

Antwort

0

Nein, sie werden in einem Hash zurückgegeben und Hashes bieten keine zuverlässige Reihenfolge. Dies könnte überschrieben werden, was normalerweise durch Hinzufügen von Dateien zum lib-Ordner und Spezifizieren der Überschreibungen in der rails-Konfiguration geschieht.

Bearbeiten Nach dem Kommentar seit Ruby 1.9.3, Hashes sind eigentlich geordnet, so ignorieren, was ich sagte.

+2

Sie können die Werte eines Hash in einer bestimmten Reihenfolge extrahieren. Was genau schlagen Sie vor, dass @Arepo "überschreibt"? –

+0

Zusätzlich 'Hash' ist zuverlässig bestellt seit 1.9.3 – engineersmnky

+0

Wusste nicht, dass, dank der Informationen, ich gerade mit Go gearbeitet habe, wo es absichtlich gemischt wird, um zu verhindern, dass jemand es für die Bestellung verwirren. Ich werde meine Antwort aktualisieren oder wenn möglich entfernen. –

Verwandte Themen