我需要在我的用户模型中添加另一列(电子邮件)。我不希望修改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
答案 0 :(得分: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://root@localhost/database')
DataMapper.auto_upgrade!
请注意,我更改了调用setup
的位置,以便在建立连接之前创建SQL日志。这里的SQL日志包括以下行:
ALTER TABLE `users` ADD COLUMN `email` VARCHAR(50) NOT NULL
我认为在不改变现有数据的情况下,您可以做到您想要的。但请注意,如果要更改列的功能(例如,更改字段的大小),则无效。 DataMapper不会检查这种更改。