Ruby on Rails セッションから 1 つのエントリをクリアするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/684457

  •  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?期待通りに動作します。

私は実際にそれが通常のハッシュのように振る舞ったい...しかし、それはしていません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top