after_commit コールバックでキャッシュされた属性を更新するときに、Globalize3 gem に問題があります。
#In My Model
after_commit :write_localized_caches
private
def write_localized_caches
I18n.available_locales.each do |locale|
Globalize.with_locale(locale) do
self.write_attribute(:name, 'some localized string here')
end
end
end
after_commit callbach を起動し、属性の値は問題ありません。しかし、結局、私のモデルの名前はまだ空です!
多分私は誤用with_locale
していますか、誰かが同じ問題に直面していますか?
更新 1. after_commit コールバックを使用して、保存されたオブジェクトに対して複雑なクエリを実行したいと思います。コールバック内で self.name を出力すると、必要なものだけが返されます: 'correct_string'。しかし、id はデータベースにヒットしません。新しい翻訳作成を書くことになりました。Globalize は地下室でコールバックを使用しているようです。
def write_localized_caches
I18n.available_locales.each do |locale|
Globalize.with_locale(locale) do
self.translations.create!(name: 'some localized string here', locale: locale)
end
end
end
これは機能しますが、それでも私には正しくありません!