ruby-on-rails – 将数据导入我的新rails应用程序的最佳方式?
嗨,我有一个sqlite3数据库,其中包含我之前版本的Web应用程序中的数据,这些数据不是用rails编写的.我现在从头开始在rails中重写web应用程序.但我想在新的rails应用程序中使用我以前的应用程序中的数据.什么是实现这一目标的最佳方式?
这是我到目前为止尝试过的,并没有很好地工作: 2)使用旧应用程序中的sqlite3数据库替换新应用程序中的sqlite3数据库 3)创建了一个与旧数据库具有相同模式的模型. 4)使用更新的DB文件详细信息更改了databse.yml文件 5)un我的模型添加了“establish_connection”方法 6)我可以让它在我的浏览器@“index.html”中向我展示旧数据库的所有细节 7)但是,当想要在DB中插入/编辑记录时,我遇到了问题.由于DB没有每行的主键列,因此它不起作用. 8)所以我尝试进行迁移以添加带主键的列.它没有用 9)突然在应用程序中出现了一个新的development.sqlite3数据库,它正在尝试向新数据库添加主键. 10)所以我刚刚删除了弹出的新数据库,之后应用程序无法运行 11)现在我想从头开始,所以我的问题: 解决方法
您希望使用2个数据库,旧数据库和新数据库.因此,您的
database.yml需要有2个连接.一个应该是您正常的连接,称为开发或生产,另一个应该称为遗留.填写他们不同的连接信息.默认情况下,ActiveRecord模型将从未被称为遗留的模型中拉出.
创建一个名为LegacyBase的模型.在模型中放入establish_connection“遗产”.现在在app / models / legacy中创建一个目录.将所有模型表示来自旧DB的数据放在此目录中.所有这些模型都应该从LegacyBase扩展.这意味着他们都是从旧数据库中读取的. 创建新模型.你想让他们有一个主键列吗?如果没有,请参阅此答案. Create an ActiveRecord database table with no :id column?.默认情况下,它们会有一个id列,我建议保留这种方式. 对于每个遗留模型,编写一个名为to_model的方法.在此方法中,编写创建新对象的代码并使用旧数据填充它并保存.像这样的东西: class OldUser < LegacyBase establish_connection "legacy" def to_model User.create!(self.attributes) end end 您可以执行任何需要发生的逻辑,以使旧数据适合您的新应用.在所有旧记录(如OldUser.all.map(&:to_model))上调用此方法. 对要移动的所有表执行此操作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |