0

したがって、オブジェクトを保持するセッション変数にオブジェクトを設定するメソッドがアプリケーションコントローラーにありました (良くないことはわかっていますが、書きませんでした。また、オブジェクトはデータベースに保存されません)。

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

したがって、デバッグすると、これがシェルに表示されます。

    >> 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

何が起こっているのかわかりません。セッションはゼロですか?なぜそれは私にさまざまな答えを与えているのですか? また、アプリケーション コントローラーの before フィルターの 1 つで、session[:dynamic_wine_club_order] の値を出力します。これはすべてのリクエストに存在します。

私のログ:

session[:dynamic_wine_club_order] = #<WineClubOrderService:0x007f8a9a606ef0>

4

1 に答える 1

0

問題は、セッションに保存していたオブジェクトが、そのインスタンス変数と同様の非 ActiveRecord オブジェクト インスタンスを持っていたためだと思います。私がしたことは、関連付けられたオブジェクトを含むためだけに別のセッション変数を作成し、それを元のオブジェクトのインスタンス変数の値に明示的に設定することでした。

于 2013-06-06T15:39:07.370 に答える