2011-02-10 1 views
1

問題は、私はに「テキスト」DataMapperの移行列は

これは私が見ていますエラーがあるが、列タイプを変更することはできませんということです〜/ Migration#1:create_person_tableを作成します。peopleidシリアルプライマリキー、name VARCHAR(2)、)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:in `ブロック(3レベル) '(--traceでタスクを実行して完全なトレースを参照) 私がDataMapperをテストするために使用しているRakeスクリプト:https://gist.github.com/818143 と思われるが、TableModifierクラス内のchange_columnメソッドは列変更ステートメントをMySQLに正しく変換していないようだ。他の一見関連したエラーは、列を長めの文字列に変換しようとすると、 DarkBook:Playground Justin $ rake migrate_up(/ Users/Justin/Dropbox/Business/datamapper/playground)〜移行の開始= =アップの実行移行#2:change_name_constraints

のALTER TABLE peopleのALTER COLUMN name TYPE文字列

〜あなたのSQL構文でエラーが発生しています。 1行目(コード:1064、SQLステート:42000、クエリ:ALTER TABLE people、ALTER COLUMN name TYPE String、uri:mysql:/)の「TYPE String」の近くで使用する正しい構文については、MySQLサーバのバージョンに対応するマニュアルを参照してください。 /root:@127.0.0.1datamapper_test)rake aborted! SQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックし、正しい構文が1行目の 'TYPE String'の近くで使用されるようにしてください。

/Users/Justin/Dropbox/Business/datamapper/playground/rakefile.rb:60:in`ブロック(2レベル)in '(完全なトレースは--traceでタスクを実行してください)

私がMySQLについて読んだことによると、「ALTER TABLE people ALTER COLUMN name TYPE String」は有効なMySQLクエリコマンドではありません。 TYPEはそこにあってはならず、Stringは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 

これを含むようにドキュメントを更新します。

関連する問題