ActiveRecord проверяет ... имя настраиваемого поля - PullRequest
2 голосов
/ 26 марта 2010

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

class Brand < ActiveRecord::Base
    validates_presence_of :foo
    ...
end

Моя цель - сделать сообщение "Требуется описание билета" вместо "Требуется Foo" или может быть не пустым, или что-то в этом роде.

Причина, по которой это так важно, состоит в том, что, скажем, ранее поле было ticket_summary. Это было здорово, и сервер был закодирован, чтобы использовать это, но теперь из-за сумасшедших безумных бизнес-аналитиков было определено, что ticket_summary - плохое имя и должно быть ticket_description. Теперь я не хочу, чтобы моя БД управлялась требованиями пользователей к именам полей, тем более что они могут часто меняться без изменений функциональности.

Есть ли механизм для обеспечения этого уже?

Для уточнения

: message => не похоже на правильное решение: message сообщит мне «Foo [message]» в качестве ошибки, я пытаюсь изменить имя поля, сгенерированного сообщениями, а не само сообщение (хотя я согласится с необходимостью изменить все это).

Ответы [ 3 ]

7 голосов
/ 30 марта 2010

Так что ответ был довольно прост ...

определить

self.human_attribute_name(attribute) и верните удобочитаемое имя:

def self.human_attribute_name(attribute)
    if attribute == :foo 
        return 'bar'
    end
end

Я бы, конечно, использовал карту имен. И это все.

7 голосов
/ 26 марта 2010

Добавьте это к вашему config/locales/en.yml файлу:

en:
  activerecord:
    errors:

      # global message format 
      format: #{message}

      full_messages:
        # shared message format across models
        foo:
          blank: Ticket description is required

        # model specific message format
        brand:
          zoo:
            blank: Name is required

Теперь измените ваше сообщение проверки, чтобы сослаться на новый формат сообщения:

validates_presence_of :bar, :message => "Empty bar is not a good idea"
validates_presence_of :foo, :message => "foo.blank"
validates_presence_of :zoo, :message => "brand.zoo.blank"

Давайте попробуем код:

b = Brand.new
b.valid?
b.errors.full_messages
#=> ["Ticket description is required", 
#     "Empty bar is not a good idea",
#     "Name is required"]

Как показано выше, вы можете настроить формат сообщения об ошибке на трех уровнях.

1) Глобально для всех сообщений об ошибках ActiveRecord

  activerecord:
    errors:
      format: #{message}

2) Общие сообщения об ошибках в моделях

  activerecord:
    errors:
      full_messages:
        foo:
          blank: Ticket description is required

3) Сообщения, специфичные для модели

  activerecord:
    errors:
      full_messages:
        brand:
          zoo:
            blank: Name is required
0 голосов
/ 25 марта 2014

Вы можете сделать как указано ниже:

# config/locales/en.yml
en:
  activerecord:
    attributes:
      brand:
        foo: "Ticket description"
    errors:
      models:
        brand:
          attributes:
            foo:
              blank: " is required"

Пожалуйста, проверьте Полностью настраиваемое сообщение об ошибке проверки с Rails для более подробной информации.

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