Как мне создать более значимое сообщение об ошибке в этом случае? - PullRequest
0 голосов
/ 25 июля 2009

Допустим, у меня есть следующая модель:

class Information < ActiveRecord::Base
...
validates_length_of :name, :minimum=>3, :message=>"should be longer than 3 characters!"
...

В качестве ошибки я хочу получить:
Информация должна быть длиннее 3 символов! (или аналогичная)
и НЕ "Информация имя должно быть длиннее 3 символов!" .

Два возможных обходных пути, на которые я смотрел:

  1. human_attribute_name метод (упоминается здесь ): не работает с моим Rails 2.3.2. : - (
  2. напрямую делает information.errors.add "","..." if information.name.length < 3: однако это удаляет многие полезные свойства, запускаемые методом validated_length_of, такие как специальные теги классов (для окрашивания красного цвета).

Есть идеи? Спасибо заваше время.

Ответы [ 3 ]

2 голосов
/ 27 июля 2009

Я предполагаю, что вы отображаете ошибки с помощью метода full_messages , который предназначен для консоли, а не для использования веб-приложения. Вместо этого следует использовать error_message_on или error_messages_for помощников (см. документация для получения дополнительной информации), которые позволяют настраивать сообщения об ошибках.

Пример:

<%= error_message_on "information", "name", :prepend_text => 'Information ' %>
1 голос
/ 27 июля 2009

Вы всегда можете установить ваше: message в пустую строку в модели, а затем установить: prepend_text в представлении на то, что вам нравится.

1 голос
/ 26 июля 2009

не используйте помощник по rails, чтобы делать ошибки, обычно у меня есть встроенные ошибки, поэтому что-то вроде:

def inline_error_block(obj, meth, prepend="", append="", klass="error error-form", &block)
  content = capture(&block)
  obj = (obj.respond_to?(:errors) ? obj : instance_variable_get("@#{obj}"))
  if obj
    errors = obj.errors.on(meth.to_s)
    if errors
      output = content_tag(:div, :class => klass) do
        content_tag(:p, "#{prepend}#{errors.is_a?(Array) ? errors.first : errors}#{append}", :class => "error-msg clearfix") + content
      end
      return concat(output)
    end
  end
  concat(content_tag(:div, content, :class => "no-error"))
end

имеет тенденцию делать трюки, но показывает только одну ошибку на поле формы,Я уверен, что вы можете изменить его, чтобы показать их все, если вам нужно! (errors.first to errors.each).

Чтобы получить полное имя, просто напишите сообщение с именем поля так, как вы хотите, чтобы оно отображалось:

validates_length_of :name, :minimum=>3, :message=>"Information should be longer than 3 characters!"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...