messaggio personalizzato di convalida per rails 3


94

Rails ha introdotto un nuovo modo per convalidare gli attributi all'interno del modello. Quando uso

validates :title, :presence => true

funziona ma quando provo ad aggiungere un messaggio personalizzato

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

viene generato un errore

Unknown validator: 'message'

Risposte:


196

Prova questo

validates :title, presence: { message: "Story title is required" }

19
Come si rimuove: titolo dal messaggio di errore sopra? Sopra viene visualizzato come "Il titolo della storia del titolo è obbligatorio". Voglio "Il titolo della storia è obbligatorio". Grazie.
datauser

5
Dov'è => trueandata a finire questa risposta? Non è necessario?
davetapley

2
@dukedave stranamente non è necessario. Puoi passare qualsiasi cosa "sincera" a presence.
danno il

1
@NotDan, collegamento interrotto.
stevenspiel

2
@Mayumi - Puoi rimuovere il nome dell'attributo dal messaggio scrivendo una convalida manuale e aggiungendo l'errore :base, ad esempio, aerrors.add(:base, "Story title is required)
Marco Prins

18

In realtà, l'ho fatto in un modo migliore. Se desideri rimuovere il titolo del campo dal messaggio, dovresti utilizzarlo nella visualizzazione _form.htmk.erb:

Come puoi vedere all'interno di questa visualizzazione:

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

Sostituiscilo con:

<ul>
  <% @article.errors.each_with_index do |msg, i| %>
  <li><%= msg[1] %></li>
  <% end %>
</ul>

Htmk? Perché, non avrei MAI
Marco Prins

1

Un messaggio personalizzato per un booleano con condizionali potrebbe essere:

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

0

È possibile utilizzare HUMANIZED_ATTRIBUTES di binari 3. Ad esempio nel caso precedente, sarà come:

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

Ti darà un messaggio di errore, sostituendo il titolo dell'attributo del modello con la storia.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.