Это:
if alert
просто проверяет, является ли alert
чем-то отличным от false
или nil
. Так что если alert
- это Ха sh, то тест всегда будет проходить, и вы получите пустую карту.
Если alert
всегда будет Ха sh, то вы можете скажем:
if alert['message'].present?
Это позаботится о том, чтобы сообщение было пустой строкой, непустой строкой, содержащей только пробел, ключ 'message'
отсутствует в alert
Ha sh, et c.
Если alert
может быть nil
, то вы можете сказать одно из них:
if alert && alert['message'].present?
if alert.to_h['message'].present?
if alert&.fetch('message', nil)
alert.to_h
дает вам alert
, если alert
является Ха sh, но дает пустое Ха sh, если alert
равно nil
. alert&.fetch('message', nil)
использует оператор безопасной навигации (&.
), чтобы скрыть проверку nil
, и использует Hash#fetch
вместо обычных скобок для поиска ключа.