尝试检查哈希中的内容,但收到“哈希的未定义方法'&'”错误

我正在编写Ruby on Rails(5)应用程序。我正在尝试简化这个障碍

if my_hash_data[:my_key_1]
  my_hash_data[:my_key_1][:my_key_2]
else
  ""
end

所以我写了

my_hash_data[:my_key_1]&[:my_key_2] || ""

但是,这导致

undefined method `&' for {:my_key_2=>"Y"}:Hash

错误。还有另一种方法可以减少我正在使用的行吗?

评论
  • iodit
    iodit 回复

    是的,这就是您要尝试做的

    my_hash_data[:my_key_1]&.[](:my_key_2) || ""
    

    but I suggest using dig from ruby 2.3 onward

    my_hash_data.dig(:my_key_1, :my_key_2) || ""
    

    Remember that h[:foo] is syntactic sugar for h.[](:foo)

  • lmagni
    lmagni 回复

    听起来您可能使用的是旧版本的ruby,但哈希没有安全的导航或挖掘方法,因此您可以尝试

     my_hash_data[:my_key_1] ? my_hash_data[:my_key_1][:my_key_2] : ''