在 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
这可行,但我仍然觉得不对劲!