2013-05-14 67 views
0

我有一個輔助模塊:輔助方法在控制器

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

有問題嗎? – 2013-05-14 16:04:41

回答

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