最近我将PostgreSQL添加到已经在MySQL上运行的应用程序,现在应用程序正在两个数据库上运行。我能够在不同数据库中存在的表之间建立关联,并且其工作正常。今天,我在一个页面中添加了一个搜索功能,该功能使用两个数据库中存在的表,并抛出错误。花了一整天试图找出错误但没有成功。请查看关联,代码并帮我纠正。
我有4张桌子: -
公司(MySQL的)
位置(MySQL的)
报告(PostgreSQL的)
REPORT_CATEGORY(PostgreSQL的)
model - company.rb
establish_connection Rails.env+"_postgres"
has_many :reports
establish_connection Rails.env
belongs_to :location
location.rb
has_many :companies
report.rb
establish_connection Rails.env
belongs_to :company
establish_connection Rails.env+"_postgres"
belongs_to :report_category
report_category.rb
establish_connection Rails.env+"_postgres"
has_many :report
现在从视图中我传递了搜索参数,并在我的reports_controller中写了
@reports = Report.where("companies.name like ? and report_category.name ?", params[:company], params[:category]).includes(:company, :report_category)
执行此行后,我收到以下错误
ActiveRecord::StatementInvalid: PGError: ERROR: relation "companies" does not exist
但
Company.where("location.name like ?", params[:location]).includes(:location)
或
Report.where("report_categories.name like ?", params[:category]).includes(:report_category)
完美无缺。如果我使用两个数据库进行搜索,我只会收到错误。请帮忙
答案 0 :(得分:0)
首先,我想在评论中提出你将所有内容移到一个数据库中的建议。这为您节省了很多复杂性。但是,如果你真的不能这样做,有几种方法可以从PostgreSQL中访问MySQL表,这将是完整迁移的第二类解决方案,但它可以工作。
在PostgreSQL 9.1及更高版本中,您可以使用MySQL的外部数据包装器进行只读查询。在早期版本中,您可以使用David Fetter的DBI-Link项目进行连接。
然后,您可以将数据作为统一数据库呈现给应用程序。