我有一个Session类来存储当前登录的用户。它是这样的:
class Session
attr_reader :user, :ip, :gef
attr_accessor :branchid
def initialize(user, ip, gef=nil)
(...)
end
(...)
end
然后我有一个控制器方法来改变这个branchid,所以用户可以访问不同的东西。 logged_user是一个Session类,它被设置为ApplicationController上的辅助方法:
class ApplicationController < ActionController::Base
helper_method :logged_user
(...)
def some_method_that_sets_logged_user_before_calling_change_branch
self.logged_user = Session.new params[:user], params[:ip]
end
def change_branch
logged_user.branchid = params[:branchid]
redirect_to root_path
end
end
当我使用Ruby 1.9.3和Rails 3.2时,这非常有效。我现在正在将Ruby升级到2.1.4,这似乎已经停止了。我在change_branch方法的中间放了一个byebug
来查看发生了什么,并且尝试直接通过控制台改变logged_user
根本不起作用。
当我键入(在服务器控制台中,在调试时)
self.logged_user.branchid = 31
然后致电
self.logged_user.branchid
它将返回旧值,而不是31。
Ruby 2.0或2.1中的任何内容都发生了变化,因此不再适用吗?