微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – Rails 3 – 具有连接条件的多个数据库

我的环境: Ruby 1.9.2p290,Rails 3.0.9和RubyGem 1.8.8

不幸的是,当遇到多个数据库时,我有一个问题.

情况是这样的:我有两个模型连接两个不同的数据库,并建立彼此之间的关联.
数据库连接在每个模型中指定,看起来像

class Visit < ActiveRecord::Base
  self.establish_connection "lab"
  belongs_to :patient
end

class Patient < ActiveRecord::Base
  self.establish_connection "main"
  has_many :visits
end

遇到以下情况时,我收到错误

@visits = Visit.joins(:patient)

错误MysqL2 ::错误:表’lab.patients’不存在:SELECT访问* FROM访问INNER JOIN患者ON patients.id IS NULL

这里’病人’表是’主’数据库和’实验室’数据库中的“访问”表
我在执行代码时怀疑,Rails正在考虑“病人”表是“实验室”数据库的一部分[其中包含“访问表”].

解决方法

那么,我不知道这是否是最优雅的解决方案,但是我已经通过定义self.table_name_prefix来明确地返回数据库名称.
class Visit < ActiveRecord::Base
  def self.table_name_prefix
    renv = ENV['RAILS_ENV'] || ENV['RACK_ENV']
    (renv.empty? ? "lab." : "lab_#{renv}.")
  end

  self.establish_connection "lab"
  belongs_to :patient
end

class Patient < ActiveRecord::Base
  def self.table_name_prefix
    renv = ENV['RAILS_ENV'] || ENV['RACK_ENV']
    (renv.empty? ? "main." : "main_#{renv}.")
  end

  self.establish_connection "main"
  has_many :visits
end

关于指定连接条件,我仍然在处理所有的细节,但我希望这有助于.

原文地址:https://www.jb51.cc/ruby/271755.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐