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) (当有很多代码引用 session[: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

尝试这个。

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

尝试:

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

从理论上讲,它会尝试将您的会话变量转换为哈希,并获取其值。

于 2012-04-24T20:50:15.877 回答