Как подключиться к таблицам двух разных баз данных в Ruby on Rails [duplicate]

Это «По дизайну». В разрешении перегрузки C ++ для этого типа метода работает следующим образом:

  • Начиная с типа ссылки и затем переходя к базовому типу, найдите первый тип, который имеет метод с именем «gogo «
  • Учитывая только методы с именем« gogo »в этом типе, найдите соответствующую перегрузку

. Поскольку Derived не имеет соответствующей функции с именем« gogo », разрешение перегрузки выходит из строя.

13
задан Manivannan Jeganathan 1 November 2011 в 16:46
поделиться

5 ответов

Ну, я не знаю, является ли это самым изящным решением, но мне это удалось, указав, что 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

Я все еще работаю над всеми подробностями, когда дело доходит до определения условий соединения, но я надеюсь, что это поможет.

10
ответ дан Daniel Cukier 15 August 2018 в 16:33
поделиться

Может быть, нужно сделать что-то вроде этого:

  def self.table_name_prefix
    "#{Rails.configuration.database_configuration["#{Rails.env}"]['database']}."
  end

Это вытащит соответствующее имя базы данных из вашего файла database.yml

7
ответ дан Alexander Sweeney 15 August 2018 в 16:33
поделиться

Является ли ваша вторая база данных на другой машине? Вы всегда можете сделать так, как предложено в этом другом вопросе:

MySQL - объединяется между базами данных на разных серверах с помощью Python?

2
ответ дан Community 15 August 2018 в 16:33
поделиться
  • 1
    Нет. Оба баз данных находятся на одной машине. Rails выглядит подходящей базой данных при вызове посещений и Пациент отдельно. 'visit = Visit.first.patient' и vise versa отлично работает. Проблема возникает только при подключении обеих моделей. – Manivannan Jeganathan 2 November 2011 в 07:33

Или даже

def self.table_name_prefix
   self.connection.current_database+'.'
end
2
ответ дан Emil 15 August 2018 в 16:33
поделиться

Я использовал бы self.table_name_prefix, как это было предложено другими, но вы можете определить его немного более точно следующим образом:

self.table_name_prefix "#{Rails.configuration.database_configuration["#{Rails.env}"]['database']}."

, альтернативно вы также можете использовать это:

self.table_name_prefix "#{connection.current_database}."

Вы должны иметь в виду, что последний выполнит запрос SELECT DATABASE() as db при первом загрузке этого класса.

0
ответ дан jeroenj 15 August 2018 в 16:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: