2016-06-22 7 views
1

Я использую множественные базы данных с ActiveRecord. Я должен поставить establish_connection db во всех моделях. Но я хочу вызвать соединение с файлом библиотек. Пока положил establish_connection db для всех моделей Количество подключений к базе данных слишком велико. Как я могу использовать другие методы?Соединение с базами данных слишком много с помощью ActiveRecord :: Base.establish_connection

Мой проект - Ruby on Sinatra.

ответ

0

Создание глобальной хэш {db_name => connection_instance } для всех возможных соединений вы имеете и извлекать их из ваших моделей разумно:

def get_or_establish_connection db 
    $connections[db] ||= establish_connection db 
end 

Таким образом, вы будете повторно использовать все уже установленные соединения.

NB Я написал «глобальный», потому что нет никакого способа предложить что-либо более надежное без знания деталей вашей архитектуры. В реальной жизни этот хеш помещал бы как переменную класса где-нибудь доступную извне.

0

Что мы делали в наших проектах, которые использовали несколько баз данных, создавали по одному классу для каждой базы данных, которые устанавливают соединение, и делают модели наследуемыми от него. Таким образом, для каждой базы данных создается только одно соединение.

class UsageTable < ActiveRecord::Base 
    self.abstract_class = true 
    establish_connection :usage 
end 
class User < UsageTable 
+0

Я попытался предложить, но класс базы данных не может наследовать класс модели. – sozgur

 Смежные вопросы

  • Нет связанных вопросов^_^