2012-03-09 7 views
0

私の見解では、作成する必要がある2つのURLがあります。それぞれにはソートのための別の値がありますが、以前のすべてのレーティング設定を含める必要があります。このURLを作成するためにparams hashから2つの異なるURLを構築すると、1が他方を上書きします

は、コントローラ上で、最後のステップとして、私はparamsハッシュでマック:

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の独立したコピーであることを期待しています。次に、それぞれに並べ替えパラメータを追加します。

%a#release_date_header= link_to "Release Date", movies_path(@dateparams) 

%a#title_header= link_to "Movie Title", movies_path(@titleparams) 

は私も@dateparamsと@titleparamsのように表示するページを来ているものを見るために、ページ上部のセクションがあります。

ビューには、同じコードではなくとして異なるTHsとでそれらを表示します。彼らは同じで、理由を理解できません。

%hr 
[email protected] 
%hr 
[email protected]s 
%hr 

表示

{"ratings"=>{"G"=>"1", "PG"=>"1"}, "sort"=>"title"} 
{"ratings"=>{"G"=>"1", "PG"=>"1"}, "sort"=>"title"} 

(この記事のために時間を無視して)として、追加される最後のソートがキーパーであるようです。すなわち、タイトルはコントローラーのアクションのコードに最後に追加されたソートなので、2つの異なるパラメーターリストの最後のものです。

2つの異なる変数にコピーされるparamsが、値渡しではなく参照渡しのように動作する理由を理解できません。私はRubyを初めて使っていますが、以前はRubyの仕事でこれを見ていませんでした。

答えて

0

Rubyで別の変数にハッシュを割り当てるときは、ハッシュのコピーではなく参照を割り当てます。したがって、@titleparams@dateparamsは、どちらもparamsと同じ基本ハッシュを参照しています。それは明らかです。それで:sort"release_date"に設定し、次に"title"で上書きします。

実際コピー取得するdupを試してみてください:

@titleparams = params.dup 
@dateparams = params.dup 
+0

はありがとうを。これは多くの助けとなりました。 – DFBerry

関連する問題