Sortierung der error_messages_for

hallo.

ich suche gerade nach einer Sinnvollen Lösung, wie man die
error_messages_for :model sortiert. habt ihr da irgend einen tipp für mich?
hab hier rapid web development mit ruby on rails liegen aber den ansatz
finde ich gar nicht ruby like und irgendwie auch sonst viel zu aufwändig.

da muss es doch irgendwas geben, damit ich die reihenfolge angeben kann.
ich stell mir das so vor. ich geb nen hash oder array in meinem model
oben an, danach soll das dann sortiert werden, geht so was?

gruß
manuel

On Sunday 11 November 2007, Manuel W. wrote:

ich suche gerade nach einer Sinnvollen Lösung, wie man die
error_messages_for :model sortiert. habt ihr da irgend einen tipp für
mich? hab hier rapid web development mit ruby on rails liegen aber
den ansatz finde ich gar nicht ruby like und irgendwie auch sonst
viel zu aufwändig.

Welchen Ansatz? In den Beispielen dort heisst es eigentlich immer

<%= error_messages_for :user %>
<%= error_messages_for :product %>

Was willst du statt dessen haben?

da muss es doch irgendwas geben, damit ich die reihenfolge angeben
kann. ich stell mir das so vor. ich geb nen hash oder array in meinem
model oben an, danach soll das dann sortiert werden, geht so was?

“Das” == die ungültigen Attribute?

Die Reihenfolge, in der die Validierungsfehler ausgegeben werden hängt
davon ab, in welcher Reihenfolge in
ActiveRecord::Base::Errors#full_messages über @errors iteriert wird.
@errors ist einfach ein Hash, da ist die Reihenfolge unbestimmt.

Wenn du das im bestehenden Rails-Code ändern willst

def full_messages
full_messages = []

  • @errors.each_key do |attr|
    
  • @errors.keys.sort_by(&:attribute_rank).each do |attr|
    ...
    

    def attribute_rank(attr)
    attribute_ordering.index(attr) || attribute_ordering.length
    end

attribute_ordering musst du irgendwie in deiner Model-Klasse setzen und
von dort in Errors hinein bekommen. Zum Speicher empfehle ich ein Class
Inheritable Attribute.

Anders gesagt, die Sache ist nicht ganz trivial. Wenn du es selbst
machen willst/musst, geht es nicht ohne einen tiefen Blick in den Rails
Code.

Ich würde empfehlen, das Problem ganz anders zu lösen, nämlich durch
eine eigene Helper-Funktion für die Formatierung der Fehler, der man
als Option ein Array mit der Attributreihenfolge übergeben kann.

Michael


Michael S.
mailto:[email protected]
http://www.schuerig.de/michael/

Hallo Michael,

danke für die lange Antwort. Denke dann werd ich es genau so machen, wie
du gesagt hast und mir dafür nen eigenen Helper bauen.

Gruß
Manuel