gpt4 book ai didi

ruby - 使用数据映射器迁移

转载 作者:太空宇宙 更新时间:2023-11-03 18:27:08 24 4
gpt4 key购买 nike

我需要向我的用户模型添加另一列(电子邮件)。我不想修改 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

最佳答案

对于添加新列等简单操作,您可以修改模型,然后调用 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 不会检查此类更改。

关于ruby - 使用数据映射器迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9408370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com