niestandardowy komunikat dotyczący walidacji dla szyn 3


94

Railsy wprowadziły nowy sposób sprawdzania poprawności atrybutów w modelu. Kiedy używam

validates :title, :presence => true

działa, ale kiedy próbuję dodać własną wiadomość

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

generowany jest błąd

Unknown validator: 'message'

Odpowiedzi:


196

Spróbuj tego

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

19
Jak usunąć: title z powyższego komunikatu o błędzie? Powyżej wyświetla się informacja „Tytuł opowieści jest wymagany”. Chcę „Wymagany jest tytuł historii”. Dzięki.
datauser

5
Gdzie => truepodziała się ta odpowiedź? Czy to nie jest konieczne?
davetapley

2
@dukedave, co dziwne, nie jest to konieczne. Możesz przekazać wszystko „prawdziwe” presence.
krzywda

1
@NotDan, link uszkodzony.
stevenspiel

2
@Mayumi - Możesz usunąć nazwę atrybutu z wiadomości, pisząc ręczną weryfikację i dodając błąd :base, na przykładerrors.add(:base, "Story title is required)
Marco Prins

18

Właściwie zrobiłem to w lepszy sposób. Jeśli chcesz usunąć tytuł pola z wiadomości, powinieneś użyć tego w swoim widoku _form.htmk.erb:

Jak widać w tym widoku:

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

Zastąp go:

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

Htmk? Dlaczego, NIGDY bym nie
Marco Prins

1

Niestandardowy komunikat dla wartości logicznej z warunkami warunkowymi może wyglądać następująco:

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

0

Możesz użyć HUMANIZED_ATTRIBUTES szyn 3. Na przykład w powyższym przypadku będzie to wyglądać następująco:

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

Wyświetli komunikat o błędzie, zastępując tytuł atrybutu modelu historią.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.