0

Я модернизация моего рельсов 3 приложения к рельсам 4. И в соответствии с руководством я удалил эту строку из моей моделиКак перенести строковый тип данных для hstore

serialize :my_serialized_column, ActiveRecord::Coders::Hstore.new({}) 

, но теперь я получаю ошибку во время цикла над :my_serialized_column, который ранее был хэширования

неопределенный метод `каждый» для „“: String

Теперь мой вопрос, как я могу изменить data_ty pe моей колонки, не теряя данных, которые у меня уже есть

+0

Вы имели hstore в рельсах 3? У Rails 4 все еще есть hstore. Зачем переходить на другой тип столбца? – BigRon

+0

В рельсах 3 типа данных столбца является 'string', мы сериализуем столбец –

ответ

0

Таким образом, вы можете просто изменить тип данных столбца с string на hstore.

Одна вещь, чтобы иметь в виду, что вам нужно отбрасывать данные в hstore или вы получите следующее сообщение об ошибке

PG::DatatypeMismatch: ERROR: column "my_serialized_column" cannot be cast automatically to type hstore 
HINT: You might need to specify "USING my_serialized_column::hstore". 

Чтобы избежать этой ошибки можно указать отливку

class ChangeMySerializedColumnTypeToHstore < ActiveRecord::Migration 
    def up 
    change_column_null :my_table, :my_serialized_column, '' 
    change_column :my_table, :my_serialized_column, "hstore USING my_serialized_column::hstore" 
    end 

    def down 
    change_column :my_table, :my_serialized_column, :string, default: '' 
    end 

end