Я создаю приложение для направляющих, и мне назвали модель User
. В этой модели мне назвали булево значение isagirl
. Пользователь должен указать, является ли это девочка или нет, который сделан двумя переключателями. В моей модели у меня есть это:
validates_presence_of :isagirl, :message => "You must be either a Boy or a Girl. If not, please contact us."
Однако, когда я не указываю пол, я вижу это:
Isagirl You должен быть или Мальчиком или Девочкой.
как сообщение об ошибке. Проблема состоит в том, что 'Isagirl' не должен быть там в сообщении об ошибке. Как я могу отключить это? И не, использование CSS для сокрытия его не является никакой опцией.
Спасибо
Я делаю это для вывода сообщения без имени поля. Например, у меня есть партиал, который выводит сообщения об ошибках после сбоя проверки.
<ul>
<% errors.each do |attribute, message| -%>
<% if message.is_a?(String)%>
<li><%= message %></li>
<% end %>
<% end -%>
</ul>
Обратите внимание, что это не выводит атрибут. Вам просто нужно убедиться, что все ваши сообщения имеют смысл без имени атрибута.
Я не знаю, как опустить имя атрибута в функции validates_presence_of (это может быть болезненно без грязного взлома), но я бы использовал функцию проверки, чтобы добиться того, чего вы хотите:
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
Я специально использовал пустой метод? здесь, потому что validates_presence_of использует пустой? для теста вы должны получить такое же поведение.
add_to_base добавляет общие сообщения об ошибках, не связанные с атрибутами, и это избавляет вас от взлома представления.
В одном из своих проектов я использовал плагин custom-err-msg . С его помощью, когда вы указываете сообщение об ошибке следующим образом:
:message => "^You must be either a Boy or a Girl. If not, please contact us."
(обратите внимание на ^
в начале), он не будет печатать имя атрибута при печати ошибок. И вы можете использовать стандартные error_messages
или error_messages_for
помощников.
Я рекомендую использовать параметр errors.add_to_base. Не зная, как выглядит ваш макет, это будет самый простой способ получить простое сообщение об ошибке.