hstore_translate 现有数据迁移

hstore_translate existing data migration

我已将 hstore_translate 添加到具有现有数据的 Rails4 项目。

class Product < ActiveRecord::Base
  translates :subtitle, :description
end

config.i18n.fallbacks = true

class AddTranslationColumnsToProducts < ActiveRecord::Migration
  def change
    add_column :products, :subtitle_translations, :hstore
    add_column :products, :description_translations,  :hstore
  end
end

如何访问我的旧字幕和描述字段?因为现在 Post.subtitle 和 Post.description 总是零。回退不起作用或我需要先迁移数据?

upd:

此迁移解决了问题。

class MigrateExistingDataToTranslations < ActiveRecord::Migration
  def change
    execute "UPDATE products p SET subtitle_translations=hstore('en',(select subtitle from products where id = p.id));"
    execute "UPDATE products p SET description_translations=hstore('en', (select description from products where id = p.id));"
  end
end

hstore_translate 定义了阅读各种翻译的方法。

当定义translates :subtitle, :description时,方法subtitle & description被创建,得到合适的翻译。因此,当调用 Product.subtitle 时,它不是获取列及其数据,而是调用方法。

要临时访问数据,您应该注释掉 hstore_translate setup

class Product < ActiveRecord::Base
  # translates :subtitle, :description
end

然后在再次取消注释之前将您的数据合并到新列中。