Rails: использование set_table_name для объединения разных баз данных на одном сервере MySQL - PullRequest
2 голосов
/ 08 апреля 2010

По традиционным причинам таблицы моей модели хранятся в двух разных базах данных на одном и том же сервере MySQL. Сначала я просто использовал establish_connection, чтобы указать вторую базу данных для моделей, которые ее использовали. Однако, когда я установил has_many :through соединение между двумя моделями в разных базах данных, оно лопнуло, потому что MySQL не может JOIN на двух разных серверах. Затем я заметил, что я могу использовать set_table_name 'other_database.foos' вместо establish_connection.

.

Это в основном работает, но table_exists? всегда возвращает false, даже когда таблица существует, и несколько используемых мной плагинов широко используют эту функцию.

Это ошибка в table_exists?, или я неправильно использую set_table_name? Есть ли другой способ сделать то, что я пытаюсь сделать?

1 Ответ

1 голос
/ 08 апреля 2010

table_exists? выполняет следующие действия:

def table_exists?(table_name)
  tables.include?(table_name.to_s)
end

Где таблицы - это массив имен таблиц для установленного соединения (определено в databases.yml). Поэтому, если вы позвоните table_exists?('database.table_name') или table_exists?('table_name_from_second_database'), он всегда вернет false.

Единственный способ обойти это - установить обезьянький патч table_exists? или функцию, загружающую массив tables См. api docs , чтобы узнать, с чего начать исправление.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...