【问题标题】:DataMapper migrating column to a new data typeDataMapper 将列迁移到新的数据类型
【发布时间】:2011-02-10 02:00:52
【问题描述】:

问题是我无法将列类型更改为“文本”

这是我看到的错误:

DarkBook:playground Justin$ rake migrate_up(在 /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 rake 中止!未初始化的常量 SQL::TableModifier::Text /Users/Justin/Dropbox/Business/datamapper/playground/rakefile.rb:61:in `block (3 levels) in ' (通过使用 --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 String

~ 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“类型字符串”附近使用正确的语法(代码:1064,sql 状态:42000,查询:ALTER TABLE people ALTER COLUMN name TYPE String,uri : mysql://root:@127.0.0.1datamapper_test) rake 中止!您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“TYPE String”附近使用正确的语法

/Users/Justin/Dropbox/Business/datamapper/playground/rakefile.rb:60:in `block (2 levels) in '(通过使用--trace运行任务查看完整跟踪)

根据我对 MySQL 的了解,“ALTER TABLE people ALTER COLUMN name TYPE String”不是有效的 MySQL 查询命令。 TYPE 不应该在那里,String 应该被转换为 VARCHAR。

查看 change_column 方法,我发现它只是我提供的类型的直接传递。这让我觉得也许我不应该直接调用 change_column 方法?

一旦我弄清楚了这一点并且我的工作进展顺利,我就会记录这些东西,因为我发现 DataMapper 的迁移 api 是地狱般的。

【问题讨论】:

    标签: mysql ruby datamapper


    【解决方案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
    

    我将更新文档以包含此内容。

    【讨论】:

      【解决方案2】:

      这是我发现的一种解决方法: https://gist.github.com/819792

      【讨论】:

        猜你喜欢
        • 2014-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多