2012-02-23 115 views
1

我需要向我的用户模型添加另一列(电子邮件)。我不想修改MySql数据库中的现有数据。我应该怎么做?使用数据映射器迁移

下面是我原来的模型类的代码,我使用西纳特拉。提前致谢。

require 'rubygems' 
require 'data_mapper' 

DataMapper.setup(:default,'mysql://[email protected]/database') 

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

DataMapper.finalize 

回答

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://[email protected]/database') 
DataMapper.auto_upgrade! 

请注意,我改变了其中setup被调用,使得SQL日志在连接建立之前创建。这里的SQL日志包括以下行:

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

我相信这是做你想做的,而不会改变现有的数据。但是,请注意,如果您想更改某列的功能(例如,更改字段的大小),则这不起作用。 DataMapper不检查这种改变。

+0

我使用DataMapper.auto_upgrade!太。它始终为我提供了开箱即用的功能。 – 2012-02-23 15:13:43