今回の問題
- ValidationにI18nで国際化した文字列を使うと、翻訳されたり、たまにされたり、全くされなかったりする
解決方法
エラーメッセージをvalidatesメソッドに指定する際、にI18nで国際化した文字列を使用するとキャッシュされてしまうようです。
なので下記のように書いていたのを・・・
address.rb
class Address < ApplicationRecord
validates :zip_code, format: {with: /\A[0-9]{3}-[0-9]{4}\z/, message: I18n.t('addresses.zip_code_validation')}, allow_blank: true
validates :residence_name, length: { maximum: 250, message: I18n.t('addresses.residence_name_validation') }
end
下記のようにProcを用いれば、キャッシュされずにちゃんと翻訳されるようになりました。
address.rb
class Address < ApplicationRecord
validates :zip_code, format: {with: /\A[0-9]{3}-[0-9]{4}\z/, message: Proc.new{ I18n.t('addresses.zip_code_validation') } }, allow_blank: true
validates :residence_name, length: { maximum: 250, message: Proc.new{ I18n.t('addresses.residence_name_validation') } }
end