validates_presence_of +: сообщение показывает название поля - PullRequest
10 голосов
/ 16 февраля 2010

Я создаю приложение Rails, и у меня есть модель с именем User. В этой модели у меня есть логическое значение под названием isagirl. Пользователь должен указать, девушка это или нет, что делается двумя переключателями. В моей модели у меня есть это:

validates_presence_of :isagirl, :message => "You must be either a Boy or a Girl. If not, please contact us."

Однако, когда я не указываю пол, я вижу это:

Isagirl Вы должны быть либо мальчиком, либо девочкой.

как сообщение об ошибке. Проблема в том, что в сообщении об ошибке не должно быть «Isagirl». Как я могу отключить это? И нет, использовать CSS, чтобы скрыть это не вариант.

Спасибо

Ответы [ 4 ]

8 голосов
/ 16 февраля 2010

Способ, которым я делаю это, - вывод сообщения без имени поля. Например, у меня есть партиал, который выводит сообщения об ошибках после сбоя проверки.

<ul>
    <% errors.each do |attribute, message| -%>
        <% if message.is_a?(String)%>
            <li><%= message %></li>
        <% end %>
    <% end -%>
</ul>

Обратите внимание, что это не выводит атрибут. Вам просто нужно убедиться, что все ваши сообщения имеют смысл без имени атрибута.

5 голосов
/ 16 февраля 2010

В одном из моих проектов я использовал плагин custom-err-msg . С ним при указании сообщения об ошибке так:

:message => "^You must be either a Boy or a Girl. If not, please contact us."

(обратите внимание ^ в начале) не будет печатать имя атрибута при ошибках печати. И вы можете использовать стандартные error_messages или error_messages_for помощники.

0 голосов
/ 20 февраля 2010

Я рекомендую использовать параметр errors.add_to_base. Не зная, как выглядит ваш макет, это будет самый простой способ получить сообщение об ошибке.

0 голосов
/ 16 февраля 2010

Я не знаю, как опустить имя атрибута в функции validates_presence_of (это может быть болезненно без грязного взлома), но я бы использовал функцию validate, чтобы достичь того, что вы хотите:

protected
    def validate
      errors.add_to_base("You must be either a Boy or a Girl. If not, please contact us.") if params[:isagirl].blank?
    end

Я использовал специально метод blank? здесь, потому что validates_presence_of использует пробел? для теста вы должны получить такое же поведение.

add_to_base добавляет общие сообщения об ошибках, которые не связаны с атрибутами, и это избавляет вас от взлома представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...