セッションハッシュに "user"キーが存在するかどうかを確認したいのですが。これどうやってするの?
キーの値がnilかどうかをチェックしたくないことに注意してください。私はただ "user" key が存在するかどうかを調べたいだけです。
Hash
のkey?
メソッドは与えられたキーが存在するかどうかを教えてくれます。
session.key?("user")
Matz氏が ここ で指摘しているように、Hash#has_key?
が仕事をこなす一方で、Hash#key?
を支持して廃止予定となっています。
hash.key?(some_key)
最新のRubyバージョンでは、Hashインスタンスは key?
メソッドを持っています。
{a: 1}.key?(:a)
=> true
ハッシュの内容に応じて、必ずシンボルキーまたは文字列キーを使用してください。
{'a' => 2}.key?(:a)
=> false
これは非常に遅いですが、できれば記号をキーとして使用する必要があります。
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
あなたがキーとして文字列を渡す場合しかし、ハッシュを作成するときそれはキーで文字列を検索します。
しかし、ハッシュを作成するときは、シンボルをキーとして渡してからhas_keyを渡します。記号を使用してキーを検索します。
Railsを使っているのなら、これを避けるためにHash#with_indifferent_access
を使うことができます。 hash[:my_key]
とhash["my_key"]
は同じレコードを指します。
キーがハッシュ内に存在するかどうかを確認するためにHash#key?
をいつでも使用できます。
そうでなければそれはあなたを返しますfalse
hash = { one: 1, two:2 }
hash.key?(:one)
#=> true
hash.key?(:four)
#=> false
別の方法はここにあります
hash = {one: 1, two: 2}
hash.member?(:one)
#=> true
hash.member?(:five)
#=> false