2016-05-23 16 views
0

Dies ist mein Anwendungsfall,Verwenden mehrerer Datenbankschienen 4

Bei einigen Modellen stellen Benutzer eine Verbindung zu verschiedenen Datenbanken auf verschiedenen Hosts her. somit unter Verwendung von establish_connection,

#charge.rb 
cattr_accessor :ip_address 
ActiveRecord::Base.establish_connection({:adapter => "postgresql", :database => Rails.application.config.database_name, :host => ip_address, 
             :username => Rails.application.config.database_user, :password => Rails.application.config.database_password }) 

Meine Frage: Wie kann ich einstellen: host, dynimically vom charges_controller.rb? Jedes andere Argument in der Methode "connect_connection" ist "Fixed".

Es wurde versucht, einen before_filter im Application Controller zu verwenden, um den Wert für ip_address vergebens zu setzen. Auch versucht, initialisieren auf das Gebührenmodell (obwohl eine schlechte Idee) ohne Erfolg. : Host, nil

Danke

Antwort

0

die ‚c‘ in der virtuellen Attribute attr_accessor :host entfernen und dann den Wertes in Ihr params-Hash einfügen, während in der Steuerung, bevor mit dem params zum Modell vorbei. Zum Beispiel:

In Ihrem typischen Controller würden Sie so etwas wie:

def create 
@charge = Charge.create(charge_params) 
@charge.connect_to_proper_host(host) 
end 

private 

def charge_params 
    params.require(:charge).permit(:at1 , :some_other_att, :host) 
end 

UPDATE

Sie diese Methode in Ihrem Modell setzen und es dann auf das neu erstellte Objekt verweist in Ihrem Controller:

def connect_to_proper_database(host) 
     self.host = host 
     #Note, You don't need to define self.host if you dont plan on reusing this variable throughout other methods in the model and can instead reference it by simply "host" in that case. 
    ActiveRecord::Base.establish_connection({:adapter => "postgresql", :database => Rails.application.config.database_name, :host => self.host, :username => Rails.application.config.database_user,:password => Rails.application.config.database_password }) 
    end 
+0

Danke, aber ein immer "param fehlt oder der Wert ist leer" Fehler ... – dev

+0

Sorr Sie haben einen Schritt ausgelassen, werfen Sie einen Blick auf das Update – bkunzi01

Verwandte Themen