2012-02-23 86 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