2015-03-23 6 views
0

Я добавил hstore_translate в проект Rails4 с существующими данными.hstore_translate существующая миграция данных

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 всегда равны нулю. Ошибка не работает, или мне нужно сначала перенести данные?

обн:

Эта миграция решает проблему.

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 

ответ

1

hstore_translate определяет методы для чтения различных переводов.

При определении translates :subtitle, :description, методы subtitle & description созданы, который получает фитинг перевода. Поэтому при вызове Product.subtitle вместо получения столбца и его данных он вызывает метод.

Чтобы получить доступ к данным временно вы должны закомментировать РЕЖИМ УСТАНОВОК hstore_translate

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

Затем объединить свои данные в новых колонки перед тем раскомментировав снова.