Перенос столбца DataMapper в новый тип данных - PullRequest
1 голос
/ 10 февраля 2011

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

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

DarkBook: детская площадка Justin $ rake migrate_up (в / Users /Джастин / Dropbox / Бизнес / Datamapper / площадка) ~ Начальная миграция == Выполнение миграции # 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,0112 с -> 0,0129 с == Выполнение миграции # 2: изменение_имя_ограничений rake прервано!неинициализированная константа SQL :: TableModifier :: Text /Users/Justin/Dropbox/Business/datamapper/playground/rakefile.rb:61:in `block (3 level) in '(полная трассировка выполняется путем запуска задачи с помощью --trace) RakeСценарий, который я использую для тестирования DataMapper: https://gist.github.com/818143 Это кажется , как будто метод change_column в классе TableModifier не преобразует корректно оператор изменения столбца в MySQL.Другие, казалось бы, связанные с этим ошибки заключаются в том, что, если я пытаюсь преобразовать столбец в строку более длинной длины, я получаю следующее: DarkBook: детская площадкаВыполнение миграции # 2: change_name_constraints

ALTER TABLE people ALTER COLUMN name TYPE String

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

/ Users / Джастин / Dropbox / Business / datamapper / plays / rakefile.rb: 60: in`block (2 level) in '(полная трассировка выполняется путем запуска задачи с --trace)

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

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

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

Ответы [ 2 ]

1 голос
/ 26 февраля 2011

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

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

1 голос
/ 10 февраля 2011

Это работа, которую я нашел: https://gist.github.com/819792

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...