Попытка проверить содержимое в моем Ha ​​sh, но с ошибкой "undefined method` & 'for Ha sh " - PullRequest
1 голос
/ 24 апреля 2020

Я пишу Ruby на рельсах (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

. Есть ли другой способ написать это, чтобы сократить количество строк, которые я использую?

Ответы [ 2 ]

2 голосов
/ 24 апреля 2020

Да, это то, что вы пытаетесь сделать

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

, но я предлагаю использовать dig с ruby 2.3 и далее

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

Помните что h[:foo] это синтакт c сахар для h.[](:foo)

1 голос
/ 24 апреля 2020

Звучит так, как будто вы используете более старую версию ruby, которая Ha sh может не иметь ни безопасной навигации, ни методов копания, поэтому вы можете просто попробовать

 my_hash_data[:my_key_1] ? my_hash_data[:my_key_1][:my_key_2] : ''
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...