会话不稳定,似乎指的是两件事?

时间:2013-06-06 14:58:59

标签: ruby-on-rails

所以我在我的应用程序控制器中有一个方法,它将一个对象设置为一个包含一个对象的会话变量(我知道它不好,但我没有写它。而且该对象没有存储在数据库中):< / p>

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>

1 个答案:

答案 0 :(得分:0)

我认为问题是因为我在会话中存储的对象具有与其实例变量类似的非ActiveRecord对象实例。我所做的是创建另一个会话变量,仅用于包含关联对象并将其显式设置为原始对象的实例变量的值。