我的应用程序中有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_user
和current_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
答案 0 :(得分:2)
current_user = user#this set variable current_user with value = user
self.current_user = user#此调用方法current_user =()with arg user