相关疑难解决方法(0)

Ruby - 访问多维哈希并避免访问nil对象

可能重复:
Ruby:IF语句中的Nils
是否有一种干净的方法可以避免在嵌套的params哈希中调用nil上的方法?

假设我尝试访问这样的哈希:

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方式吗?

ruby hash conditional

87
推荐指数
3
解决办法
3万
查看次数

是否有一种干净的方法可以避免在嵌套的params哈希中调用nil上的方法?

我有兴趣获取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)

有没有更清洁的方法来实现这一点?

ruby null ruby-on-rails hashmap

33
推荐指数
4
解决办法
6320
查看次数

如何避免NoMethodError在嵌套哈希中缺少元素,而不重复nil检查?

我正在寻找一种避免nil在深层嵌套哈希中检查每个级别的好方法.例如:

name = params[:company][:owner][:name] if params[:company] && params[:company][:owner] && params[:company][:owner][:name]
Run Code Online (Sandbox Code Playgroud)

这需要三次检查,并且会产生非常难看的代码.有办法解决这个问题吗?

ruby hash ruby-on-rails hash-of-hashes

28
推荐指数
3
解决办法
3547
查看次数

优雅地处理嵌套哈希中的空白值

我相信我以前见过这个优雅的解决方案,但我找不到它:

我有一个rails控制器,可能或者可能没有以下hash元素:

myhash[:parent_field]
Run Code Online (Sandbox Code Playgroud)

在该父字段内,子元素也可以为空.我目前通过(非常丑陋的)方法检查:

if (!myhash[:parent_field] || !myhash[:parent_field][:child_field] || myhash[:parent_field][:child_field].blank?)
Run Code Online (Sandbox Code Playgroud)

哪个有效,但我认为 - 当然 - 必须有一个更优雅的方式.只是重申:

  • myhash [:parent_field]可能存在也可能不存在
  • 如果确实存在,myhash [:parent_field] [:child_field]可能存在也可能不存在
  • 如果存在,则可能是空白,也可能不是空白.

ruby ruby-on-rails

6
推荐指数
1
解决办法
2585
查看次数

找出密钥中是否存在子密钥

我有一个像这样的YAML文件:

options:
    some_option: 'foo'
Run Code Online (Sandbox Code Playgroud)

我加载为哈希yaml,我希望能够使用它include?来获取一个布尔值,告诉它是否存在密钥.

要获取子键options,我通常会使用yaml["options"]["some_option"],但是如何判断YAML哈希是否包含["options"]["some_option"]?你做不了类似的事情:

if yaml.include? "options"["some_option"] # or
if yaml.include? ["options"]["some_option"] # or even
if yaml.include? yaml["options"]["some_option"]
Run Code Online (Sandbox Code Playgroud)

有没有办法检索optionsYAML哈希中的子键?

ruby yaml hashtable

0
推荐指数
1
解决办法
3423
查看次数