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?
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. –
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