访问帮助程序以获取会话对象

时间:2013-04-12 13:26:21

标签: ruby-on-rails session

我的应用程序中有2个不同的控制器,它们应该访问同一个会话对象。目前我正在使用:active_record_store,因为我不想使用数据库来获取我的用户。

我正在做这样的事情:

api控制器接收用户电子邮件并创建用户对象(有效?,哈希和其他方法)

class ApiController < ApplicationController
  def login
    user = Requester.validate_email params[:email]
    if user.valid?
      session[:current_user] = user # works
      current_user = user           # dont work
      redirect_to app_root_path
    else
      redirect_to app_signup_path
    end
  end
end

家庭控制器将向用户显示一些页面,因为他已经“记录”在

class PagesController < ApplicationController

  def home
    puts "Home"

    # Everything here works fine
    puts session[:current_user].hash
    puts session[:current_user]
    puts session[:current_user].nil?

    # Nothing here works
    puts current_user.hash
    puts current_user
    puts current_user.nil?
  end
end

current_usercurrent_user=方法位于ApplicationController

class ApplicationController < ActionController::Base
  protect_from_forgery

private 
  def current_user
    session[:user]
  end

  def current_user=(user)
    session[:user] = user
  end
end
我在做错了什么?为什么我无法从私有方法中访问session[:user]

<小时/> 在开发中使用rails 3.2.11和sqlite3,在生产中使用postgresql

<小时/> 的修改

我发现了我的问题,显然我无法使用current_user = <some object>,如果我使用current_user(<some object>)那么这会有效。

def current_user(user)
  session[:user] = user
end

def current_user=(user)
  session[:user] = user
end

def current_user
  session[:user]
end

1 个答案:

答案 0 :(得分:2)

current_user = user#this set variable current_user with value = user

self.current_user = user#此调用方法current_user =()with arg user

相关问题