0

如何更改 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:接近“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”选项(如您所见),但没有提供任何有用的信息。

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

任何帮助表示赞赏。谢谢。

4

1 回答 1

1

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

于 2014-01-22T05:50:18.183 回答