миграция с помощью datamapper - PullRequest
1 голос
/ 23 февраля 2012

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

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

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 Ответ

3 голосов
/ 23 февраля 2012

Для простых вещей, таких как добавление нового столбца, вы можете изменить свою модель и затем вызвать 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 не проверяет такие изменения.

...