Ruby 使用datamapper进行迁移

Ruby 使用datamapper进行迁移,ruby,sinatra,datamapper,Ruby,Sinatra,Datamapper,我需要在我的用户模型中添加另一列(电子邮件)。我不希望修改MySql数据库中的现有数据。我该怎么做 下面是我原始模型类的代码,我正在使用Sinatra。提前谢谢 require 'rubygems' require 'data_mapper' DataMapper.setup(:default,'mysql://root@localhost/database') class User include DataMapper::Resource property :id,

我需要在我的用户模型中添加另一列(电子邮件)。我不希望修改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

对于添加新列之类的简单操作,您可以修改您的模型,然后调用
auto\u 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不会检查这种更改。

我使用DataMapper.auto\u升级!也对我来说,它总是开箱即用。