Quero verificar se a chave "usuário" está presente ou não no hash da sessão. Como posso fazer isso?
Observe que não quero verificar se o valor da chave é nulo ou não. Eu só quero verificar se a chave "usuário" está presente.
Quero verificar se a chave "usuário" está presente ou não no hash da sessão. Como posso fazer isso?
Observe que não quero verificar se o valor da chave é nulo ou não. Eu só quero verificar se a chave "usuário" está presente.
Respostas:
Hash
O key?
método de informa se uma chave está presente ou não.
session.key?("user")
Enquanto Hash#has_key?
faz o trabalho, como Matz observa aqui , ele foi preterido em favor de Hash#key?
.
hash.key?(some_key)
Nas versões mais recentes do Ruby, a instância do Hash tem um key?
método:
{a: 1}.key?(:a)
=> true
Certifique-se de usar a tecla de símbolo ou uma tecla de seqüência de caracteres, dependendo do que você possui no seu hash:
{'a' => 2}.key?(:a)
=> false
É muito tarde, mas de preferência os símbolos devem ser usados como chave:
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
Mas, ao criar hash, se você passar a string como chave, ele procurará a string nas chaves.
Mas ao criar o hash, você passa o símbolo como chave e has_key? procurará as teclas usando o símbolo.
Se você estiver usando o Rails, poderá Hash#with_indifferent_access
evitar isso; ambos hash[:my_key]
e hash["my_key"]
apontará para o mesmo registro
Hash#with_indifferent_access
evitar isso; ambos :my_key
e "my_key"
irá apontar para o mesmo registro
Você sempre pode usar Hash#key?
para verificar se a chave está presente em um hash ou não.
Caso contrário, ele retornará false
hash = { one: 1, two:2 }
hash.key?(:one)
#=> true
hash.key?(:four)
#=> false
Outra maneira é aqui
hash = {one: 1, two: 2}
hash.member?(:one)
#=> true
hash.member?(:five)
#=> false