2

現在、私のコードでは、特定のセッションキー/値が存在するかどうかを確認しようとしています。存在する場合は、何かを実行します。複数のifステートメントではなく、これらすべてを一度に実行する方法はありますか?

これが私のifステートメントです:

if session[:mysession] %>
  if session[:mysession][:cats] != "fluffy" %>
    #do something
  end
end

これを行うと、nilエラーが発生します。

if session[:mysession][:cats] == "fluffy"
  #do something
end

ありがとう!

4

4 に答える 4

4

(1)

if session[:mysession] && (session[:mysession][:cats] != "fluffy")

(2)(セッションを参照するコードがたくさんある場合は特に良い[:mysession])

session[:mysession] ||= {}
if session[:mysession][:cats] != "fluffy"

(3)

if session.fetch(:mysession, {})[:cats] != "fluffy"
于 2012-04-24T21:27:20.717 に答える
3

try関数を使用できます。nilで呼び出されると、サイレントにnilを返します。キーを引数として[]メソッドを「試行」します

if session[:mysession].try(:[], :cats) == "fluffy"
    #do something
end
于 2012-04-24T20:57:09.330 に答える
0

試す:

if Hash(session[:mysession])[:cats] == "fluffy"
  % do something
end

理論的には、セッション変数をハッシュに変換しようとし、その値を取得します。

于 2012-04-24T20:50:15.877 に答える
0

これを試して。

 session['cats'] = Hash.new if session['cats'] == nil
 // do something
 @cat_session = session['cats'] 
于 2012-04-24T20:59:29.050 に答える