Validates_presence_of +: сообщение показывает имя поля

Я создаю приложение 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, чтобы скрыть его, не является вариантом.

Спасибо

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

Я не знаю, как опустить имя атрибута в функции 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 добавляет общие сообщения об ошибках, не связанные с атрибутами, и это избавляет вас от взлома представления.

Ответ 4

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