2013-11-22 16 views
5

Ich arbeite an einer Padrino-Anwendung, die eine App und eine Admin-App enthält. Wenn ein Benutzer-Logins durch Sitzung, ich die folgenden zwei Zeilen nur laufen loggt ihn.Wie Zugriff auf aktuelle_Account in Modellen in Padrino?

account = Account.authenticate(params[:email], params[:password]) 
set_current_account(account) 

Mit Debugger in allen Controllern in Admin

current_account 
#<Account @id=1 @name="John" @surname="Davies" @email="[email protected]" @crypted_password="3456789" @role="admin"> 

Mit Debugger in allen Modellen

current_account 
*** NameError Exception: undefined local variable or method `current_account' for #<Post @id=1 @question="Why is this not working?" @answer="I have no idea"> 

Ich kann auf current_account zugreifen, um herauszufinden, welcher Benutzer in der Admin-App angemeldet ist, aber diese Variable ist in der Haupt-App nicht verfügbar.

Was ich versuche zu tun ist, dass ich einen Activity Feed oder Audit Trail für alle meine Modelle erstellen, also wenn ein Datensatz in einem Modell erstellt/aktualisiert/zerstört wird, wird ein neuer Datensatz in Modell Activity erstellt . Davon abgesehen muss ich auf die Variable current_account in meinen Modellen zugreifen.

ich nach Lösungen gesucht haben, und über einen Vorschlag kam:

In admin/app.rb

enable :sessions 
set :session_id, "my-global-session" 

In app/app.rb

register Padrino::Admin::AccessControl 
register Padrino::Admin::Helpers 

enable :sessions 
set :session_id, "my-global-session" 

Es hat nicht funktioniert für mich. Gibt es eine Möglichkeit, auf current_account in meinen Modellen zuzugreifen?

Vielen Dank für eine Anleitung oder einen Vorschlag.

Antwort

3

Ich bin mir nicht ganz sicher, was Sie versuchen zu tun, aber ich löste ein ähnliches Problem wie folgt aus:

class Account 
    # ... 
    class << self 
    attr_accessor :current 
    end 
    # ... 
end 

class Admin < Padrino::Application 
    #... 
    before do 
    Account.current = current_account 
    end 
    # ... 
end 

Und dann Account.current verwenden, darauf zuzugreifen.