如何在Geddy中更改属性的类型

时间:2014-01-21 19:14:14

标签: node.js geddy

如何在Geddy中更改现有属性的类型?

我认为我需要在模型文件中定义属性时更改类型:

this.defineProperties({
  title: {type: 'string', required: true},
  description: {type: 'text'},
  status: {type: 'boolean'}
});

我还认为我需要在迁移中更改表。我正在使用这里记录的'changeColumn'函数http://geddyjs.org/guide#models

var StatusToBoolean = function () {
  this.up = function (next) {
    this.changeColumn("step", 'status', 'boolean', function (err, data) {
      if (err) { throw err; }
      next();
    });
  };

  this.down = function (next) {
    this.changeColumn('step', 'status', 'string', function (err, data) {
      if (err) { throw err; }
      next();
    });
  };
};

exports.StatusToBoolean = StatusToBoolean;

但是,当我运行此迁移时,我得到一个'SQLITE_ERROR:near“ALTER”'错误:

Hindenburg:to_do Tom$ geddy jake db:migrate  --trace
Running migrations for development environment...
Running status_to_boolean (up)
jake aborted.
Error: SQLITE_ERROR: near "ALTER": syntax error
Hindenburg:to_do Tom$ 

这让我觉得我做错了什么。我尝试了'--trace'选项(正如你所看到的那样),但是没有提供任何有用的信息。

我还怀疑我需要实际更改表中的一些数据(以便它可以映射到新的数据类型),但文档不清楚如何执行此操作。

感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:1)

不幸的是,SQLite不支持ALTER COLUMN(http://www.sqlite.org/lang_altertable.html)。这只是SQLite适配器中的一个问题,它不会影响Postgres或MySQL。还有一些解决方法,如下所述:How do I rename a column in a SQLite database table?您可以编写执行这些步骤的迁移。当您尝试使用SQLite适配器执行此操作时,Geddy的ORM版本0.4.16(现在在NPM上)现在包含一条友好的错误消息。