2011-02-10 2 views
1

Проблема в том, что я не могу изменить тип столбца «Текст»DataMapper миграции колонки на новый тип данных

Это ошибка, что я вижу:

DarkBook: площадка Justin $ рейка migrate_up (in/Users/Justin/Dropbox/Business/datamapper/playground) ~ Запуск миграции == Выполнение миграции # 1: create_person_table CREATE TABLE people (id SERIAL PRIMARY KEY, name VARCHAR (2), age INTEGER) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci -> 0.0112s -> 0.0129s == Выполнение миграции # 2: change_name_constraints rak e прервано! Неинициализированная константа SQL :: TableModifier :: Text /Users/Justin/Dropbox/Business/datamapper/playground/rakefile.rb:61: в блоке (3 уровня) в '(см. полный след, выполнив задачу с помощью --trace) Графический скрипт, который я использую для тестирования DataMapper: https://gist.github.com/818143 Это кажется, как будто метод change_column в классе TableModifier не преобразовывает оператор изменения столбца в MySQL правильно. Другие, казалось бы, связанные ошибки: если я попытаюсь преобразовать столбец в строку большей длины, я получаю следующее: DarkBook: игровая площадка Justin $ rake migrate_up (in/Users/Justin/Dropbox/Business/datamapper/playground) ~ Начальная миграция = = Выполнение Up миграции # 2: change_name_constraints

ALTER TABLE people ALTER COLUMN name ТИП Строка

~ у вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «TYPE String» в строке 1 (код: 1064, sql state: 42000, query: ALTER TABLE people ALTER COLUMN name TYPE String, uri: mysql://root:@127.0.0.1datamapper_test) rake aborted! У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MySQL, для правильного синтаксиса для использования рядом с «TYPE String» по строке 1

/Users/Justin/Dropbox/Business/datamapper/playground/rakefile.rb:60:in `block (2 уровня) в '(полный след, выполнив задачу с --trace)

Согласно тому, что я читал о MySQL, „ALTER TABLE people ALTER COLUMN name строкового типа“ не является допустимой команда запроса MySQL. ТИП не должен быть там, и строка должна быть преобразована в VARCHAR.

Внутри метода change_column я вижу, что это просто прямой проход того типа, который я предоставляю. Это заставляет меня думать, что, возможно, я не должен напрямую обращаться к методу change_column?

Как только я выясню это, и я нахожусь в пути, я документирую этот материал, поскольку выясняя, что миграция DataMapper api была адской.

ответ

1

change_column не особенно ярко. Текущая реализация:

def change_column(name, type, opts = {}) 
    @statements << "ALTER TABLE #{quoted_table_name} ALTER COLUMN #{quote_column_name(name)} TYPE #{type}" 
end 

Значение необходимо указать базовый тип SQL, а не тип DataMapper. Ключ:

modify_table :people do 
    change_column :name, 'text' 
end 

Я буду обновлять документацию, чтобы включить это.