Изменить сообщение проверки ошибки в Скрепке - PullRequest
7 голосов
/ 07 января 2011

Когда вы устанавливаете сообщение проверки в скрепке, например

validates_attachment_presence, :image, :message => 'xxxx'

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

Редактировать: опечатка

Ответы [ 4 ]

7 голосов
/ 18 января 2011

Не реальное, но простое решение - пропустить проверку скрепки и написать собственную.

validate :check_content_type

  def check_content_type
   if !['image/jpeg', 'image/gif','image/png'].include?(self.image_content_type)
    errors.add_to_base("Image '#{self.image_file_name}' is not a valid image type") # or errors.add
   end
  end 

Я надеюсь, что это может помочь

3 голосов
/ 18 января 2011

Вы на самом деле хотите сделать это в своем представлении, а не в своей модели, и это на самом деле довольно просто. Мы просто собираемся просмотреть ошибки, и когда появится сообщение для вашего вложения, мы проигнорируем имя поля:

<ul>
  <% @myObject.errors.keys.each do |field| %>
    <% @myObject.errors[field].each do |msg| %>
      <% if field == :image_file_name %>
        <li><%= msg %></li>
      <% else %>
        <li><%= field.to_s + " " + msg %></li>
      <% end %>
    <% end %>
  <% end %>
</ul>

Замена @myObject именем вашей модели, в котором должно отображаться только сообщение с ошибками проверки вашего вложения. Это простой пример, который отображает их в ряд с остальными, но, конечно, вы можете делать с сообщениями все, что вам нравится. Важно сохранить имя поля, в котором произошла ошибка, на случай, если вы захотите запрограммировать любую логику, относящуюся к ее ошибке, без необходимости полагаться на сообщение об ошибке, оставаясь неизменным всегда.

1 голос
/ 13 января 2011

Это стандартное поведение Rails, отображающее имя атрибута перед ошибками валидации. У вас есть несколько вариантов, чтобы обойти это поведение:

  1. Сделайте ваше сообщение об ошибке ОК, чтобы добавить имя атрибута:)

  2. Используйте другой форматер сообщения об ошибке. Довольно просто написать свой собственный помощник, чтобы перебирать @ object.errors и оборачивать сообщения в HTML-теги. Я предпочитаю использовать сообщения об ошибках в строке рядом с полями, поэтому мы всегда пропускаем имя атрибута.

  3. Пользовательская проверка, которая добавляет ошибки к базе . Это легко, но неправильно, так как вы предполагаете, что в поле есть ошибка проверки. Тем не менее может решить вашу проблему.

  4. Переопределить humanized_attribute_name для этого атрибута, чтобы скрыть его. humanized_attribute_name, вероятно, используется в другом месте, поэтому это может вызвать другие проблемы.

.

HumanizedAttributesOverride = {
  :image => ""
}

def self.human_attribute_name(attr)
  HumanizedAttributesOverride[attr.to_sym] || super
end
0 голосов
/ 07 января 2011

Я не знаю, является ли это просто опечатка в вашем вопросе, но это должно быть:файл локалей.

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