Как получить доступ к ключу перевода для ошибки проверки ActiveModel?

У меня есть ситуация, когда я не хочу хранить ключ перевода для ошибки проверки в моей базе данных вместо самого сообщения об ошибке. Представьте себе следующую ситуацию:

class Car < ActiveRecord::Base
  validates_presence_of :year, :fuel
end

car = Car.new(:fuel => 'Diesel')
car.save!
#=> ActiveRecord::RecordInvalid

Теперь, если я позвоню:

car.errors
#=> :year=>["can't be blank"]

Я получаю переведенное сообщение об ошибке.

Вместо этого я хотел бы извлечь ключ перевода, который сгенерирует это (в этом случае я думаю, что это будет что-то вроде errors.messages.blank), поэтому я могу сохранить его в своей базе данных в другой модели, например. FailedCar, чтобы позже я мог сгенерировать индивидуальную форму I18n для заполнения недостающей информации вручную в представлении.

ОБНОВЛЕНИЕ

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


person Niels Kristian    schedule 15.07.2013    source источник


Ответы (2)


Хорошо, наконец-то я понял!

Решение НЕ состоит в том, чтобы исправлять или делать что-либо на стороне рельсов - вместо этого ответ кроется в геме I18n.

I18n, который по стандарту использует rails для переводов, имеет возможность добавлять новые серверные модули, чтобы обеспечить большую гибкость. В этом случае серверная часть под названием метаданные делает именно то, что мне нужно. При добавлении I18n::Backend::Simple.include(I18n::Backend::Metadata) в инициализатор он дает мне возможность извлекать всю информацию, связанную с переводом, непосредственно из строки сообщения об ошибке, добавляя вызов метода translation_metadata.

Фантастическое простое решение сложной проблемы :-)

person Niels Kristian    schedule 16.07.2013
comment
Это здорово! Спасибо! - person Julik; 19.05.2016

Вы тоже смотрели локальные файлы (.yml)? Вы можете сохранить его как строку перевода. Для получения дополнительной информации Интернационализация Rails.

person RajG    schedule 16.07.2013