所以我在我的应用程序控制器中有一个方法,它将一个对象设置为一个持有对象的会话变量(我知道这不好,但我没有写它。并且该对象没有存储在数据库中):
def current_wine_club_order
if session[:dynamic_wine_club_order] && session[:dynamic_wine_club_order] != ''
return session[:dynamic_wine_club_order]
else
return WineClubOrderService.new()
end
end
我的控制器中的这段代码在以下位置中断logger.debug { "#{@wine_club_order.inspect}" }
:
def new
@wine_club_order = current_wine_club_order
logger.debug { "#{@wine_club_order.inspect}" }
@wine_club_order.current_user = current_user
@wine_club_order.clear_errors!
self.current_wine_club_order = @wine_club_order
logger.debug { "#{@wine_club_order.inspect}" }
end
因此,当我调试时,这就是我在 shell 中得到的:
>> session
!! #<NoMethodError: undefined method `[]' for nil:NilClass>
>> session[:dynamic_wine_club_order]
!! #<NoMethodError: undefined method `[]' for nil:NilClass>
>> session[:what]
=> nil
>> session.class
=> Rack::Session::Abstract::SessionHash
>> session
!! #<NoMethodError: undefined method `[]' for nil:NilClass>
>> session.nil?
=> false
我不明白发生了什么事。会话为零吗?为什么它给了我不同的答案?在我的应用程序控制器中的一个之前的过滤器中,我打印出 session[:dynamic_wine_club_order] 的值是什么,并且它存在于每个请求中:
我的日志:
session[:dynamic_wine_club_order] = #<WineClubOrderService:0x007f8a9a606ef0>