0

私のURLは次のとおりです。

http://localhost:3000/movies?ratings[PG-13]=1&commit=Refresh

URL パラメーターの評価を実験していますが、なぜこれが機能するのかわかりません。私のコントローラーでは、パラメーターを評価し、次のように配列を作成します。

Viewの場合、次のデバッグステートメントを使用して、何が配置されるかを確認します@selected_ratings

=debug(@selected_ratings)

私のコントローラーでは、2 つのステートメントを試しました。

テスト 1 は次を返します。これは機能するはずですか?

@selected_ratings = (params["ratings[PG-13]"].present? ? params["ratings[PG-13]"] : "notworking")

output: notworking

ただし、コントローラーで次の三項評価を使用すると、次のようになります。

@selected_ratings = (params["ratings"].present? ? params["ratings"] : "notworking")

output:!map:ActiveSupport::HashWithIndifferentAccess 
  PG-13: "1"

評価でリテラルが見つからないのはなぜparams["ratings[PG-13]"]ですか?

4

1 に答える 1

5

Railsは、フォームの文字列パラメータをa[b]=cハッシュとして解析します[1]。ここbで、はキーであり、cはそれに関連付けられた値です{ :a => { :b => "c" } }

したがって、URLhttp://localhost:3000/movies?ratings[PG-13]=1&commit=Refreshはハッシュになります。

{ :ratings => { :'PG-13' => "1"}, :commit => "Refresh" }

最初の割り当てでは、存在するかどうかを確認しますparams["ratings[PG-13]"]が、存在しないため、「動作していません」と返されます。2番目のケースでは、存在するかどうかを確認し、存在するため、キーと値を持つハッシュであるをparams["ratings"]返します。params["ratings"]PG-13"1"

[1]むしろ、記号と文字列のキーを単一の型に変換HashWithIndifferentAccessする特別な種類のハッシュ。

于 2012-10-15T04:17:04.547 に答える