In Sinatra, I use params to get the key/value passed through the URL query string. I noticed I can use either a string or a symbol as the key to get the value. So if the URL is:
http://localhost:4567/x?a=1&b=2
Then:
params[:a] # => "1"
params["a"] # => "1"
params.to_s # => '{"name"=>"x", "a"=>"1", "b"=>"2"}'
params.class # => Hash
I can tell params is a Hash. But this doesn't seem to be a common behavior of a Hash.
h = {"a" => "1", "b" => "2"}
h["a"] # => "1"
h[:a] # => nil
Can someone please explain how this is achieved through Sinatra?
Always a good idea to have a read of the source. Specifically, the
indifferent_params
method.As the comment states, it's this method (invoked on line 704 of the same file) that allows string and symbol access to the
params
hash.