2016-06-22 15 views
1

Ich benutze multible Datenbanken mit Activerecord. Ich muss establish_connection db in allen Modellen setzen. Aber ich möchte die Verbindung der Bibliotheksdatei aufrufen. Setzen Sie establish_connection db für alle Modelle in Datenbankverbindung Anzahl ist zu viel. Wie kann ich andere Methoden machen?Datenbankverbindung zu viel mit Active :: Base.establish_connection

Mein Projekt ist ein Ruby on Sinatra.

Antwort

0

Aufbau einer globalen Hash {db_name => connection_instance } für alle möglichen Verbindungen, die Sie haben und abrufen Sie sie von Ihrem Modelle intelligent:

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

diese Weise können Sie alle bereits bestehenden Verbindungen wiederverwenden werden.

NB Ich schrieb "global", weil es keine Möglichkeit gibt, etwas robuster ohne Kenntnis Ihrer Architekturdetails vorschlagen. Im wirklichen Leben würde man diesen Hash als Klassenvariable irgendwo von überall zugänglich machen.

0

Was wir in unseren Projekten haben, die mehrere Datenbanken verwendet wurde pro Datenbank eine Klasse zu schaffen, dass die Verbindung herzustellen, und Modelle von ihm erben machen. Auf diese Weise wird nur eine Verbindung pro Datenbank erstellt.

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

Ich habe versucht, vorschlagen, aber Datenbank-Klasse kann nicht in Modellklasse erben. – sozgur