Quiero comprobar si la clave "usuario" está presente o no en el hash de la sesión. ¿Cómo puedo hacer esto?
Tenga en cuenta que no quiero verificar si el valor de la clave es nulo o no. Solo quiero verificar si la clave "usuario" está presente.
Quiero comprobar si la clave "usuario" está presente o no en el hash de la sesión. ¿Cómo puedo hacer esto?
Tenga en cuenta que no quiero verificar si el valor de la clave es nulo o no. Solo quiero verificar si la clave "usuario" está presente.
Respuestas:
Hash
El key?
método le dice si una clave dada está presente o no.
session.key?("user")
Mientras Hash#has_key?
hace el trabajo, como Matz señala aquí , ha quedado en desuso a favor Hash#key?
.
hash.key?(some_key)
En las últimas versiones de Ruby, la instancia de Hash tiene un key?
método:
{a: 1}.key?(:a)
=> true
Asegúrese de usar la tecla de símbolo o una tecla de cadena dependiendo de lo que tenga en su hash:
{'a' => 2}.key?(:a)
=> false
Es muy tarde, pero preferiblemente los símbolos deben usarse como clave:
my_hash = {}
my_hash[:my_key] = 'value'
my_hash.has_key?("my_key")
=> false
my_hash.has_key?("my_key".to_sym)
=> true
my_hash2 = {}
my_hash2['my_key'] = 'value'
my_hash2.has_key?("my_key")
=> true
my_hash2.has_key?("my_key".to_sym)
=> false
Pero al crear hash si pasa una cadena como clave, entonces buscará la cadena en las claves.
Pero cuando creas hash, pasas el símbolo como clave y luego has_key? buscará las teclas usando el símbolo.
Si está utilizando Rails, puede usar Hash#with_indifferent_access
para evitar esto; ambos hash[:my_key]
y hash["my_key"]
apuntarán al mismo registro
Hash#with_indifferent_access
para evitar esto; ambos :my_key
y "my_key"
señalarán el mismo récord
Siempre puedes usar Hash#key?
para verificar si la clave está presente en un hash o no.
Si no, te devolverá false
hash = { one: 1, two:2 }
hash.key?(:one)
#=> true
hash.key?(:four)
#=> false
Otra forma es aquí
hash = {one: 1, two: 2}
hash.member?(:one)
#=> true
hash.member?(:five)
#=> false