In daily development the parameters passed to the
action in the
Controller when implementing business logic will be placed in the
params object. generally we can access with
params[:token] #=> token_value #or params["token"] #=> token_value
You will find that the value of key in
params can be access by using
Is it a bit magical?
In fact the principle is very simple
params have the characteristics extend from
class HashWithIndifferentAccess < Hash #...... def =(key, value) regular_writer(convert_key(key), convert_value(value, for: :assignment)) end # key point def convert_key(key) key.kind_of?(Symbol) ? key.to_s : key end def self.(*args) new.merge!(Hash[*args]) end end
Through the above source code analysis, it can be seen that for a
HashWithIndifferentAccess object, when assigning it key is uniformly converted into String type (
When a value is to be taken, the key of the Symbol will be forced to be converted to
String so that the user can use Symbol ** or **String to take the same value.
Hope it can hlep you :)