спеціальне повідомлення перевірки для рейок 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
Як видалити заголовок: із наведеного вище повідомлення про помилку? Вгорі відображається "Заголовок заголовка потрібно". Я хочу "Потрібна назва історії". Дякую.
datauser

5
Куди => trueподілася ця відповідь? Це не потрібно?
davetapley

2
@dukedave як не дивно це не потрібно. Ви можете передати будь-що, що є "брутальним" presence.
шкода

1
@NotDan, посилання порушено.
stevenspiel

2
@Mayumi - Ви можете видалити ім'я атрибута з повідомлення, написавши перевірку вручну та додавши помилку :base, наприклад,errors.add(:base, "Story title is required)
Marco Prins

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.