在我看来,我需要创建2个网址。每个都有一个单独的排序值,但必须包括所有以前的评级设置。
为了在控制器上创建这个URL,作为最后一步,我使用了params hash:
params.delete :controller
params.delete :action
params.delete :commit
params.delete :utf8
params[:ratings] = @ratings
@titleparams = params
@dateparams = params
@dateparams[:sort] = "release_date"
@titleparams[:sort] = "title"
我希望@titleparams和@dateparams是params的独立副本。然后我将sort param添加到每个。
视图使用相同的代码显示它们,但在不同的TH中显示为:
%a#release_date_header= link_to "Release Date", movies_path(@dateparams)
%a#title_header= link_to "Movie Title", movies_path(@titleparams)
我还在页面顶部有一个部分,以查看@dateparams和@titleparams即将要查看的内容。他们是一样的,我不明白为什么。
%hr
=@titleparams
%hr
=@dateparams
%hr
显示为(忽略此帖子的小时)
{"ratings"=>{"G"=>"1", "PG"=>"1"}, "sort"=>"title"}
{"ratings"=>{"G"=>"1", "PG"=>"1"}, "sort"=>"title"}
似乎最后添加的是守门员。即,标题是控制器动作代码中添加的最后一种,因此它是两个不同参数列表中的最后一个。
我不明白为什么params复制到两个不同的变量中就像是通过引用传递而不是传递值。我是Ruby的新手,但我之前在Ruby工作中没有看到过这个。
答案 0 :(得分:0)
在Ruby中为has分配另一个变量时,分配引用,而不是散列的副本。因此,@titleparams
和@dateparams
都会将相同的基础哈希引用为params
本身。很明显,然后,您将:sort
设置为"release_date"
,然后使用"title"
覆盖。
尝试dup
获取实际的副本:
@titleparams = params.dup
@dateparams = params.dup