2013-11-22 1 views
5

Я работаю над приложением Padrino, которое имеет основное приложение и приложение администратора. Когда пользователь логины через сессию, я просто запустить следующие две строк для входа его.Как получить доступ к current_account в моделях в Падрино?

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

С отладчиком в любых контроллерах в администраторе

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

С отладчиком в любых моделях

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"> 

Я могу получить доступ к current_account, чтобы узнать, какой пользователь вошел в приложение администратора, но эта переменная недоступна в главном приложении.

Что я пытаюсь сделать, так это то, что я создаю фид активности или Audit Trail для всех своих моделей, поэтому, когда запись создается или обновляется/уничтожается в любой модели, в модели создается новая запись , При этом мне нужно получить доступ к переменной current_account в моих моделях.

Я искал решения, и наткнулся на предложение:

В админ/app.rb

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

В приложение/app.rb

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

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

Это не сработало для меня. Есть ли способ получить доступ к current_account в моих моделях?

Благодарим вас за руководство или предложение.

ответ

3

Я не совсем уверен, что вы пытаетесь сделать, но я решил аналогичную проблему так:

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

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

, а затем использовать Account.current для доступа к нему.