5

Railsコントローラー関数に渡すパラメーターを手動で作成しようとしています.paramsハッシュへのキーがコロンでリストされているのはなぜparams[:key]ですかparams["key"]?

4

3 に答える 3

16

RailsHashWithIndifferentAccessparams. は、同じ「値」のシンボルまたは文字列によるキー アクセスが同じハッシュ値を返すことを除いて、通常のHashWithIndifferentAccessハッシュと同じように動作します。例えば:

h = HashWithIndifferentAccess.new
h[:foo] = 'bar'
h[:foo]  #=> "bar"
h['foo'] #=> "bar"

h['foo'] = 'BAR'
h[:foo]  #=> "BAR"

対通常のハッシュ:

h = {}
h[:foo] = 'bar'
h[:foo]  #=> "bar"
h['foo'] #=> nil

h['foo'] = 'BAR'
h[:foo]  #=> "bar"

これにより、特定のキーが Symbol か String かを (良くも悪くも) 心配する必要がなくなります。

于 2013-01-27T21:31:03.133 に答える
0

ほとんどの場合、文字列 (引用符付き) と記号 (コロン付き) は、Rails のハッシュ キーとして交換されます。ハッシュ キーの記号は、定義済みの定数である場合は慣用的です。Ruby 1.9 には、キーの記号を含むハッシュを記述するための構文糖衣があります。

于 2013-01-27T21:44:46.360 に答える
0

ハッシュは、各シンボルのインスタンスが常に 1 つしかないため、シンボルをキーとして使用します。これにより、検索が容易になります。文字列を使用する場合、同じ文字列にすることはできないため、ハッシュを計算する必要があります (別のインスタンスですが、内容は同じです)。だからそれはそれをより速くします。アクティブなサポートHashWithIndifferentAccessは、メソッドを使用してすべての文字列をシンボルにキャストします#to_sym

于 2013-01-27T21:33:11.553 に答える