Benutzerdefinierte Validierungsnachricht für Schienen 3

94

Rails hat eine neue Methode zur Validierung von Attributen innerhalb des Modells eingeführt. Wenn ich benutze

validates :title, :presence => true

Es funktioniert aber, wenn ich versuche, eine benutzerdefinierte Nachricht hinzuzufügen

validates :title, :presence => true,:message => "Story title is required"

Es wird ein Fehler generiert

Unknown validator: 'message'
Prabesh Shrestha
quelle

Antworten:

196

Versuche dies

validates :title, presence: { message: "Story title is required" }
Shiv
quelle
19
Wie entferne ich den Titel: aus der obigen Fehlermeldung? Oben wird angezeigt, dass der Titel der Titelgeschichte erforderlich ist. Ich möchte "Story-Titel ist erforderlich." Vielen Dank.
Datauser
5
Wo ist das => truein dieser Antwort geblieben? Ist es nicht nötig
Davetapley
2
@dukedave seltsamerweise ist es nicht notwendig. Sie können alles "Wahrhaftige" weitergeben presence.
Schaden
1
@NotDan, Link defekt.
Stevenspiel
2
@Mayumi - Sie können den Attributnamen aus der Nachricht entfernen , indem Sie eine manuelle Validierung Schreiben und Hinzufügen der Fehler :base, zum Beispielerrors.add(:base, "Story title is required)
Marco Prins
18

Eigentlich habe ich das besser gemacht. Wenn Sie den Feldtitel aus der Nachricht entfernen möchten, sollten Sie diesen in Ihrer Ansicht _form.htmk.erb verwenden:

Wie Sie in dieser Ansicht sehen können:

<ul>
  <% @article.errors.full_messages.each do |msg| %>
  <li><%= msg %></li>
  <% end %>
</ul>

Ersetzen Sie es durch:

<ul>
  <% @article.errors.each_with_index do |msg, i| %>
  <li><%= msg[1] %></li>
  <% end %>
</ul>
Mateusgf
quelle
Htmk? Ich würde NIE
Marco Prins
1

Eine benutzerdefinierte Nachricht für einen Booleschen Wert mit Bedingungen könnte sein:

validates :foo,  inclusion: { in: [true, false], message: "cannot be blank" }, if: :bar?
Stevenspiel
quelle
0

Sie können HUMANIZED_ATTRIBUTES von Schienen 3 verwenden. Im obigen Fall sieht es beispielsweise so aus:

HUMANIZED_ATTRIBUTES = {
:title => "story"
}
 def self.human_attribute_name(attr, options={})
    HUMANIZED_ATTRIBUTES[attr.to_sym] || super
end

Es wird eine Fehlermeldung angezeigt, bei der der Titel des Modellattributs durch die Story ersetzt wird.

Shyamkkhadka
quelle