评估URL参数,而不是返回预期结果

时间:2012-10-15 04:02:42

标签: ruby-on-rails ruby parameters

我的网址如下:

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

我正在尝试评估网址参数,并且我不确定为什么这种方式有效。在我的控制器中,我评估参数并构建一个数组,如下所示:

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

=debug(@selected_ratings)

在我的控制器中,我尝试了两个陈述。

测试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]"]

1 个答案:

答案 0 :(得分:5)

Rails将表单a[b]=c的字符串参数解析为哈希[1],其中b是一个键,c是其关联值:{ :a => { :b => "c" } }

因此,网址http://localhost:3000/movies?ratings[PG-13]=1&commit=Refresh将导致哈希:

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

在您的第一个作业中,您检查是否存在params["ratings[PG-13]"],并且由于它不存在,它将返回" notworking"。在第二种情况下,您检查params["ratings"]是否存在,它是,因此返回params["ratings"],这是一个包含密钥PG-13和值"1"的哈希。 / p>

[1]或者更确切地说是HashWithIndifferentAccess,一种converts symbol and string keys into a single type的特殊哈希值。