Когда вы используете I18n.t
в области видимости класса, как вы делаете при вызове validates_uniqueness_of
, оно будет оценено при загрузке файла.Это, вероятно, не то, что вы хотите, потому что это означает, что сообщение всегда будет отображаться в локали по умолчанию, а не с использованием локали пользователя, выполняющего каждый запрос.Это также может быть причиной проблемы, которую вы видите, если файл загружен до того, как настроен I18n.
Вместо этого используйте символ:
validates_uniqueness_of :username, ..., :message => :username_exist
И см. Документацию для ActiveModel::Errors#generate_message
, чтобы увидеть, где разместить перевод в файле локали.
На самом деле вам даже не нужно предоставлять ключ :message
, если вы следуете соглашению об именах ActiveModel:
en:
activemodel:
errors:
models:
[your model name, e.g. user]:
attributes:
username:
taken: "username exists"