2017-03-03 5 views
0

Ich deklariere eine globale Variable innerhalb des ApplicationControllers, aber ich versuche, von jedem Modell darauf zuzugreifen, aber wenn das geschieht, ist die Variable leer im Modell, in dem ich einen Wert zuweisenZugriff auf die ApplicationControler-Variable im Modell

das ist meine Application

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 
    before_action :base 

    def base 
    @empresa2 = current_usuario.empresa_id 
    end 
end 

das mein Modell Logdatabase

ist
class Logdatabase < ActiveRecord::Base 
    self.abstract_class = true 

    if @empresa2 == "28" 
    establish_connection(:development) 
    else 
    establish_connection(:otrabase) 
    end 

end 
+0

Im Idealfall sollten Sie es nicht versuchen Zugriff auf Variablen vom Controller im Modell. In MVC Architecture werden Model, View und Controller separate Verantwortlichkeiten zugewiesen und Sie sollten sich daran halten. Selbst dann möchten Sie darauf zugreifen, den Code, den Sie versucht haben, posten und dann versuchen, Hilfe von der SO-Community zu erhalten. – Pramod

+0

@ Pramod ok Ich habe Post erhalten. Wie kann ich dann die Variable ActionController an das Modell übergeben? – LuisC

Antwort

1

hätte ich die Steuerung die Verbindung setzen:

class ApplicationController < ActionController::Base 
    before_action :set_database 

    def set_database 
    empresa2 = current_usuario.empresa_id 
    configuration_name = emprase2 == '28' ? :development : :otrabase 
    ActiveRecord::Base.eastablish_connection(configuration_name) 
    end 

end 

aber es sieht aus wie Sie versuchen, Ihre Produktionsserver Switch dynamisch zwischen Produktion und Entwicklung von Datenbanken zu machen. Ich würde das nicht empfehlen, sondern einen separaten Server einrichten (oder wenn das nicht möglich ist, dann einen zweiten Webserver auf dem gleichen Server unter Verwendung eines virtuellen Servernamens oder einer alternativen Portnummer einrichten)

0

Wenn Sie die übergeben werden sollen Inhalt einer Variablen zu Ihrem Modell Sie definieren eine Methode in Ihrem Modell, die einen Parameter akzeptiert.

In Ihrem Empresa Modell:

def receive_variable_from_countroller(variable) 
#do what you want with the variable 
end 

In Ihrem Empresa Controller:

#define your variable 
variable = "foo" 
Empresa.receive_variable_from_controller(variable) 

denke ich, dass der einfachste Weg, es zu tun wäre. In diesem Fall

Verwandte Themen