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

Pro*_*eur 0 ruby parameters ruby-on-rails

我的网址如下:

http://localhost:3000/movies?ratings[PG-13]=1&commit=Refresh
Run Code Online (Sandbox Code Playgroud)

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

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

=debug(@selected_ratings)
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我尝试了两个语句.

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

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

output: notworking
Run Code Online (Sandbox Code Playgroud)

但是,如果我在控制器中使用以下三元评估:

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

output:!map:ActiveSupport::HashWithIndifferentAccess 
  PG-13: "1"
Run Code Online (Sandbox Code Playgroud)

为什么我的评价没有找到文字params["ratings[PG-13]"]

Chr*_*erg 5

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

所以url http://localhost:3000/movies?ratings[PG-13]=1&commit=Refresh会产生哈希:

{ :ratings => { :'PG-13' => "1"}, :commit => "Refresh" }
Run Code Online (Sandbox Code Playgroud)

在您的第一个作业中,您检查是否params["ratings[PG-13]"]存在,并且由于它不存在,它将返回"notworking".在第二种情况下,检查是否params["ratings"]存在,它是,所以它返回params["ratings"],这是一个带键PG-13和值的哈希"1".

[1]或者更确切地说,a HashWithIndifferentAccess,一种将符号和字符串键转换为单一类型的特殊哈希.