2009-07-25 8 views
0

sagen, dass ich das folgende Modell haben:Wie erstelle ich in diesem Fall eine aussagekräftigere Fehlermeldung?

class Information < ActiveRecord::Base 
... 
validates_length_of :name, :minimum=>3, :message=>"should be longer than 3 characters!" 
... 

Was will ich als Fehler haben ist:
Informationen länger als 3 Zeichen sein würden! (oder ähnlich)
und NICHT "Informationen Name sollte länger als 3 Zeichen sein!".

Zwei mögliche Abhilfen Ich habe betrachtet:

  1. human_attribute_name Methode (genannt here): nicht mit meiner Rails 2.3.2 funktionieren. :-(
  2. direkt tun ein information.errors.add "","..." if information.name.length < 3: dies jedoch durch die validated_length_of Verfahren wie die Sonderklasse-Tags ausgelöst viele nützliche Eigenschaften entfernt (für das Material rot Färbung)

Irgendwelche Ideen danken.? . Dank für Ihre Zeit

Antwort

2

Ich nehme an, dass Sie Fehler durch full_messages Methode, anzuzeigen, die für die Konsole gemeint ist, nicht für die Verwendung von Webanwendungen. Sie sollten stattdessen error_message_on oder error_messages_for Helfer verwenden (siehe documentation für weitere Informationen), mit denen Sie Fehlermeldungen anpassen können.

Beispiel:

<%= error_message_on "information", "name", :prepend_text => 'Information ' %> 
+0

danke für deine hilfe. – jacob

1

verwendet die Schiene Helfer nicht die Fehler zu machen, in der Regel habe ich Inline-Fehler so etwas wie:

def inline_error_block(obj, meth, prepend="", append="", klass="error error-form", &block) 
    content = capture(&block) 
    obj = (obj.respond_to?(:errors) ? obj : instance_variable_get("@#{obj}")) 
    if obj 
    errors = obj.errors.on(meth.to_s) 
    if errors 
     output = content_tag(:div, :class => klass) do 
     content_tag(:p, "#{prepend}#{errors.is_a?(Array) ? errors.first : errors}#{append}", :class => "error-msg clearfix") + content 
     end 
     return concat(output) 
    end 
    end 
    concat(content_tag(:div, content, :class => "no-error")) 
end 

neigt dazu, den Trick zu tun, aber es zeigt nur einen Fehler pro Formularfeld, bin sicher, dass Sie es neu anordnen könnten, um sie alle zu zeigen, sollten Sie! (errors.first to errors.each).

den vollständigen Namen zu erhalten, schreiben Sie einfach die Nachricht mit dem Feldnamen, wie Sie wollen es angezeigt:

validates_length_of :name, :minimum=>3, :message=>"Information should be longer than 3 characters!" 
+0

danke für Ihre Hilfe. Auf meinem System wird die untere Zeile wie folgt angezeigt: Informationsname Informationen sollten länger als 3 Zeichen sein! :( – jacob

+0

ist das mit errors_for oder mit meinem Helfer? –

+0

hast du recht. Danke. – jacob

1

Sie können immer geben Sie Ihre: Nachricht auf eine leere Zeichenfolge in das Modell dann den: prepend_text im Blick auf das, was Sie möchten.

+0

danke für ihre hilfe – jacob

Verwandte Themen