0

我的网址如下:

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

我正在尝试评估 URL 参数,但不确定为什么会这样。在我的控制器中,我评估参数并构建一个数组,如下所示:

在我的View我使用以下调试语句来查看放入的内容@selected_ratings

=debug(@selected_ratings)

在我的控制器中,我尝试了两种说法。

测试一返回以下内容,这应该有效吗?

@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]"]存在,因为它不存在,所以它返回“不工作”。在第二种情况下,您检查是否params["ratings"]存在,并且它存在,所以它返回params["ratings"],这是一个带有 keyPG-13和 value的散列"1"

[1] 或者更确切地说,aHashWithIndifferentAccess是一种特殊的散列,将符号和字符串键转换为单一类型

于 2012-10-15T04:17:04.547 回答