tutorial rails que ejemplos descargar curso caracteristicas ruby-on-rails ruby

ruby-on-rails - que - ruby on rails tutorial



Navegación segura equivalente a los rieles que intentan los hashes. (4)

Pre Ruby 2.3

Usualmente pongo algo como esto en mi intializador:

Class Hash def deep_fetch *args x = self args.each do |arg| x = x[arg] return nil if x.nil? end x end end

y entonces

response.deep_fetch ''PaReqCreationResponse'', ''ThreeDSecureVERes'', ''Message'', ''VERes'', ''CH'', ''enrolled''

en un caso loco

El consenso general en la comunidad parece ser evitar tanto el intento como el operador solitario &.

Ruby 2.3 y posteriores

Hay un método de Hash#dig ahora que hace eso:

Recupera el objeto de valor correspondiente a cada objeto clave repetidamente.

h = { foo: {bar: {baz: 1}}} h.dig(:foo, :bar, :baz) #=> 1 h.dig(:foo, :zot) #=> nil

http://ruby-doc.org/core-2.3.0_preview1/Hash.html#method-i-dig

En Rails, puedes hacer hash.try(:[], :key) que ayuda si el hash es potencialmente nil . ¿Existe una versión equivalente para usar el nuevo operador de navegación segura Ruby 2.3 &. con [] ?


La respuesta aceptada no se tendrá en cuenta cuando el hash sea ​​nulo ...

Puede volver a escribir lo que tiene utilizando el operador de navegación segura antes de .try y eso funcionará

hash&.try(:[], :key)

pero también puedes usar:

http://ruby-doc.org/core-2.3.0_preview1/Hash.html#method-i-dig

Una forma de hacer esto en un hash es haciendo ...

hash&.dig(:key1, :key2 ...)

que devolverá nulo si no está presente ninguna extracción de clave.

{ key1: { key2: ''info'' } }

devolvería ''info''

{ key1: { wrong_key: ''info'' } }

volvería a nil


Mientras que hash&.[](:key) es elegante para el rubyista entrenado, solo uso hash && hash[:key] porque se lee mejor y de forma más intuitiva para el programador que viene después de mí, que puede que no esté tan familiarizado con el complejidades de rubí. Algunos caracteres adicionales en el código base a veces pueden ahorrar mucho googlear para otra persona.

(Dado el contexto en el que desea usar esto está en una declaración condicional, por supuesto).


&. no es equivalente al try Rails, pero puedes usar &. Para hashes. Solo úsalo, nada especial.

hash[:key1]&.[](:key2)&.[](:key3)

Aunque no haría eso.