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
然后在再次取消注释之前将您的数据合并到新列中。
我已将 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
然后在再次取消注释之前将您的数据合并到新列中。