2012-02-23 2 views
1

Мне нужно добавить еще один столбец (адрес электронной почты) в мою модель пользователя. Я не хочу изменять существующие данные в базе данных MySql. Как мне это сделать?переход с datamapper

Ниже приведен код моего первоначального модельного класса, и я использую Sinatra. Заранее спасибо.

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! слишком. Он работает из коробки все время для меня. –

Смежные вопросы