我需要使用postgresql db将sqlite3 db中的一些遗留数据导入到我的rails应用程序中。因此,我创建了一个模型“业务”,其中包含旧版sqlite3 db的所有列类型。我更改了database.yml文件等等......在模型business.rb中我添加了这一行:
class Business < ActiveRecord::Base
establish_connection "citylistings_development"
end
这允许我连接到sqlite3数据库,我创建了一个index.html.erb文件,在那里我可以看到浏览器中的内容。
在控制器中我的代码是这样的:
class BusinessesController < ApplicationController
def get_all
@businesses = Business.all
end
def create_db_entries
self.get_all
end
def index
respond_to do |format|
format.html #index.html.erb
end
end
end
现在我注意到当我创建模型时“business.rb它在我的postgresql db中创建了表。
但是,显然它从我的sqlite3 db读取数据,因为它连接到该数据库。
我的问题是这个,
如何将输出到index.html.erb文件的数据写入pg db?这甚至可能吗?
Model实例可以一次连接到2个数据库并从1读取并写入另一个数据库吗?
我知道解决这个问题的一种方法是创建另一个模型“tempbiz”,它将把条目写入pg db,而“business”模型从sqlite3 db读取。如果“业务”模型可以完成这两项任务,我想知道什么?
谢谢
编辑这是我的database.yml根据下面的评论(我排除了所有注释掉的东西)
#===============================================================================
development:
adapter: postgresql
encoding: unicode
database: XXX_development
pool: 5
username: XXX
password: XXXX
#===============================================================================
citylistings_development:
adapter: sqlite3
database: db/citylistings.sqlite3
pool: 5
timeout: 5000
我看到了关于这个主题的演示文稿,你需要签出secondbase gem。引用其文档“SecondBase为您的应用程序添加第二个数据库。虽然Rails使您能够建立与任意数量的外部数据库的连接,但Rails只能通过它的迁移和测试任务来管理单个数据库。”
https://github.com/karledurante/secondbase
它是出于您需要它的确切原因而创建的。他们有一个他们需要导入的遗留数据库。
干杯,肖恩
这将是Rails 6中的原生。
class AnimalsBase < ApplicationRecord
connects_to database: { writing: :animals, reading: :animals_replica }
end