使用datamapper进行迁移

时间:2012-02-23 06:46:18

标签: ruby sinatra datamapper

我需要在我的用户模型中添加另一列(电子邮件)。我不希望修改MySql数据库中的现有数据。我该怎么办?

下面是我原始模型类的代码,我正在使用Sinatra。提前谢谢。

require 'rubygems'
require 'data_mapper'

DataMapper.setup(:default,'mysql://root@localhost/database')

class User
  include DataMapper::Resource
  property :id,              Serial
  property :name,            String, :unique=>true, :required=>true
end

DataMapper.finalize

1 个答案:

答案 0 :(得分:3)

对于添加新列等简单内容,您可以修改模型,然后调用auto_upgrade!,如下所示:

require 'rubygems'
require 'data_mapper'

class User
  include DataMapper::Resource
  property :id,              Serial
  property :name,            String, :unique=>true, :required=>true
  property :email,           String, :unique=>true, :required=>true
end

DataMapper.finalize
DataMapper::Logger.new(STDOUT,  :debug)
DataMapper.setup(:default,'mysql://root@localhost/database')
DataMapper.auto_upgrade!

请注意,我更改了调用setup的位置,以便在建立连接之前创建SQL日志。这里的SQL日志包括以下行:

ALTER TABLE `users` ADD COLUMN `email` VARCHAR(50) NOT NULL

我认为在不改变现有数据的情况下,您可以做到您想要的。但请注意,如果要更改列的功能(例如,更改字段的大小),则无效。 DataMapper不会检查这种更改。