假设我尝试访问这样的哈希:
my_hash['key1']['key2']['key3']
Run Code Online (Sandbox Code Playgroud)
如果key1中存在key1,key2和key3,这很好,但是如果,例如key1不存在呢?
然后我会得到NoMethodError: undefined method [] for nil:NilClass.没有人喜欢这样.
到目前为止,我处理这个有条件的事情:
if my_hash['key1'] && my_hash['key1']['key2'] ...
这是否合适,还有其他Rubiest方式吗?
我有兴趣获取params哈希的嵌套'name'参数.打电话给像
params[:subject][:name]
Run Code Online (Sandbox Code Playgroud)
当params [:subject]为空时抛出错误.为了避免这个错误,我通常写这样的东西:
if params[:subject] && params[:subject][:name]
Run Code Online (Sandbox Code Playgroud)
有没有更清洁的方法来实现这一点?
我正在寻找一种避免nil在深层嵌套哈希中检查每个级别的好方法.例如:
name = params[:company][:owner][:name] if params[:company] && params[:company][:owner] && params[:company][:owner][:name]
Run Code Online (Sandbox Code Playgroud)
这需要三次检查,并且会产生非常难看的代码.有办法解决这个问题吗?
我正在使用的rails应用程序中有以下非常难看的ruby代码:
if params.present?
if params[:search].present?
if params[:search][:tags_name_in].present?
...
end
end
end
Run Code Online (Sandbox Code Playgroud)
所有我想问的是是否已经定义了params [:search] [:tags_name_in],但因为params,params [:search]和params [:search] [:tags_name_in]可能都是零,如果我使用...
if params[:search][:tags_name_in].present?
Run Code Online (Sandbox Code Playgroud)
...如果没有参数或没有搜索参数,我会收到错误.
肯定有一个更好的方法来做到这一点......建议?