пользовательское сообщение проверки для рельсов 3


94

Rails представил новый способ проверки атрибутов внутри модели. Когда я использую

validates :title, :presence => true

он работает, но когда я пытаюсь добавить собственное сообщение

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

генерируется ошибка

Unknown validator: 'message'

Ответы:


196

Попробуй это

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

19
Как удалить заголовок: из сообщения об ошибке выше? Выше отображается как «Требуется заголовок статьи». Я хочу "Требуется название истории". Спасибо.
датаузер 06

5
Куда => trueделся этот ответ? Разве это не нужно?
davetapley

2
@dukedave как ни странно не нужен. Вы можете передать что-нибудь «правдивое» presence.
вред

1
@NotDan, ссылка не работает.
stevenspiel

2
@Mayumi - Вы можете удалить имя атрибута из сообщения, написав ручную проверку и добавив ошибку :base, например,errors.add(:base, "Story title is required)
Марко Принс,

18

Собственно, я сделал это лучше. Если вы хотите удалить заголовок поля из сообщения, вы должны использовать его в своем представлении _form.htmk.erb:

Как вы можете видеть внутри этого представления:

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

Заменить на:

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

Htmk? Почему, я бы НИКОГДА
Марко Принс

1

Пользовательское сообщение для логического с условными выражениями может быть:

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

0

Вы можете использовать HUMANIZED_ATTRIBUTES рельсов 3. Например, в приведенном выше случае это будет примерно так:

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

Это даст вам сообщение об ошибке, заменив название атрибута модели историей.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.