2013-06-18 9 views
5

Ich habe zwei verschiedene Datenbanken für meine Rails-Anwendung verwendet: MongoDB und MsSQL mit Mongoid und activerecord-sqlserver-adapter Adapter. Alles ist gut, aber es gibt ein Problem beim Generieren von Model.Schienen mit zwei verschiedenen Datenbanken

Das Problem ist "Wie kann ich das Modell, das sich auf MongoDB oder MsSQL bezieht, anders erzeugen?"

Zum Beispiel: Ich möchte People Modell bezieht sich mit MsSQL-MongoID und Animal Modell erzeugen. Während ich mit Befehl erzeuge: rails g model Animal name:string erzeugt es das Modell, das auf Mongoid bezogen wird. Wie kann ich das Modell Animal mit ActiveRecord generieren, das auf MsSQL bezogen ist?
Bitte helfen Sie mir. Dank

Antwort

1

Zunächst lassen Sie mich nur prüfen, ob ich Ihre Frage richtig verstanden habe:

Sie haben 2 Datenbanken und eine Reihe von Modellen/Migrationen, und Sie wollen einen Weg Schienen zu sagen, welche Datenbank zu verwenden, beim Laufen eine Migration und Zugriff auf die Datenbank mit Ihrem Modell?

Wenn ich im richtigen Bereich bin, müssen Sie eine Methode zu Ihrer Migration hinzufügen, die die Standardmethode connection() in ActiveRecord::Migration überschreibt.

def connection 
    ActiveRecord::Base.establish_connection(:conn_name).connection 
end 

Wo :conn_name ist der Name, den Sie Ihre Verbindungseinstellungen in der Konfigurations gab/database.yml

innerhalb Ihrer Modelle fügen Sie die Zeile

establish_connection :conn_name 

an der Spitze Ihrer Modelldatei und das Modell wird nun wissen, mit welcher DB eine Verbindung hergestellt werden soll.

0

So ist die schnelle und schmutzige Art und Weise, die ich in der Vergangenheit behandelt habe (wegen meines Dev-Team mongoid in der Edelstein-Datei für Legacy-Gründe zu halten) Wenn Sie Migrationen ausführen müssen, führen Sie ein Bundle aus, erstellen und führen Sie die Migration aus, entfernen Sie das Kommentarzeichen und führen Sie das Bundle erneut aus. Dies ist bei weitem nicht die beste Vorgehensweise, aber es sollte funktionieren.