2013-05-14 2 views
0

У меня есть вспомогательный модуль:методы Helper в контроллере

module SessionsHelper 
    @current_user 
    @current_session 

    def current_user 
    @current_user = User.find(cookies[:user_id]) if(cookies[:user_id]) 
    end 

    def current_session 
    @current_session = Session.find_by_secret_key(cookies[:session_secret_key]) 
    end 

    def current_user=(user) 
    @current_user = user 
    end 

    def current_session=(session) 
    @current_session = session 
    end 
end 

и контроллер:

class SessionsController < ApplicationController 
    include SessionsHelper 
    respond_to :json 

    def create 
    u = User.find_by_ip(request.remote_ip) 
    u = User.create({:ip => request.remote_ip}) unless u 

    s = Session.create 
    s.admin = u 
    s.save! 

    send(:current_user=,u) 
    send(:current_session=,s) 

    respond_with s 
    end 
end 

уведомление, как я должен установить текущий пользователь с помощью метода :send, так как вызов current_user=u непосредственно в контроллер не будет этого делать.

+0

Возникли вопросы? –

ответ

0

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

before_filter :load_current_user 

def load_current_user 
    @current_user = User.find(session[:user_id]) if(session[:user_id]) 
end 

@current_user будет доступен во всех контроллерах.

0

Вызов current_user напрямую, как ожидается, работать, однако вам нужно использовать self явный приемник

def create 
    u = User.find_by_ip(request.remote_ip) 
    u = User.create({:ip => request.remote_ip}) unless u 

    s = Session.create 
    s.admin = u 
    s.save! 

    self.current_user = u 
    self.current_session = s 

    respond_with s 
end 

В противном случае, следующий код будет установлен локальный метод переменной

def create 
    u = User.find_by_ip(request.remote_ip) 
    u = User.create({:ip => request.remote_ip}) unless u 

    s = Session.create 
    s.admin = u 
    s.save! 

    current_user = u 
    current_session = s 

    respond_with s 
end 

В качестве примечания , вы можете использовать значащие имена переменных.

def create 
    user = User.find_by_ip(request.remote_ip) || User.create(:ip => request.remote_ip) 

    session = Session.create 
    session.admin = user 
    session.save! 

    self.current_user = user 
    self.current_session = session 

    respond_with session 
end 
Смежные вопросы