加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 将数据导入我的新rails应用程序的最佳方式?

发布时间:2020-12-17 02:35:29 所属栏目:百科 来源:网络整理
导读:嗨,我有一个sqlite3数据库,其中包含我之前版本的Web应用程序中的数据,这些数据不是用rails编写的.我现在从头开始在rails中重写web应用程序.但我想在新的rails应用程序中使用我以前的应用程序中的数据.什么是实现这一目标的最佳方式? 这是我到目前为止尝试过
嗨,我有一个sqlite3数据库,其中包含我之前版本的Web应用程序中的数据,这些数据不是用rails编写的.我现在从头开始在rails中重写web应用程序.但我想在新的rails应用程序中使用我以前的应用程序中的数据.什么是实现这一目标的最佳方式?

这是我到目前为止尝试过的,并没有很好地工作:
1)我创建了一个新的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)现在我想从头开始,所以我的问题:
“将数据从以前的非rails应用程序(以sqlite3数据库格式)导入新的rails应用程序的最佳方式是什么?”

解决方法

您希望使用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))上调用此方法.

对要移动的所有表执行此操作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读