Ruby on Rails セッションから 1 つのエントリをクリアするにはどうすればよいですか?
-
22-08-2019 - |
質問
Ruby on Railsで実行するとき session[:foo] = nil
という名前のエントリが残ります :foo
セッションオブジェクト内。セッション オブジェクトからその 1 つのエントリを削除するにはどうすればよいでしょうか?
解決
実際には、セッションから値を削除する方法があります。RichH が言ったように、セッション変数は CGI::Session インスタンスです。次のようなものを入力すると session[:foo]
実際にはそのシンボルを検索しています @data
セッションオブジェクトのインスタンス変数。そのデータ変数はハッシュです。
編集: CGI::Session クラスにはデータ インスタンス変数があります。に行くなら ドキュメント のソースコードを見てください。 []=
メソッドがあることがわかります @data
メンバー。
それで削除するには session[:foo]
あなたがしなければならないのはそれにアクセスすることだけです @data
セッション内からの変数
session.data[:foo]
削除するには:
session.data.delete :foo
これを実行すると、セッション変数には foo が含まれなくなります。
他のヒント
のように見えます 最も単純なバージョンは動作します. 。すべてのストア (Cookie、ファイル、ActiveRecord など) を使用します。 AbstractStore::SessionHash
データを含むオブジェクトとして、さまざまなストアは、データをロードおよび保存する手段のみを提供します。 AbstractStore::SessionHash
インスタンス。
AbstractStore::SessionHash
から継承します Hash
, 、したがって、これは Hash#delete
方法:
session.delete(:key_to_delete)
がセッションとしてルビー CGI ::セッションであるとないハッシュ、実際にセッションを削除します削除を呼び出します。削除パラメータを取りません - これはあなたがhyuanを示唆して何しようとすると、私のあなたは、「引数の数が間違って(1または0)」というメッセージを取得しているです。
。 [:FOO] = nilのお勧めとしてセッションエントリをクリアする一般的に受け入れられている方法は、セッションです。それは理想からかけ離れているが、セッションのような文[:fooの] .nil?期待通りに動作します。
私は実際にそれが通常のハッシュのように振る舞ったい...しかし、それはしていません。