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]"]?
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,一种将符号和字符串键转换为单一类型的特殊哈希.
| 归档时间: |
|
| 查看次数: |
321 次 |
| 最近记录: |