4

通常のパラメーターと一緒にネストされたパラメーター (q としてネストされたランサック経由) を使用してページにリンクを作成していますが、ネストされたパラメーターを他のパラメーターとマージしようとすると、2 つをうまく再生するのに問題があります。

たとえば、私が持っている場合:

{"freq"=>"weekly", "loan_amount"=>"350000",
"q"=>{"lowEquity_true"=>"1", "s"=>"rate asc"}}

パラメータ「lowEquity_true」を変更するためのリンクを作成してみてください

rates_url(params[:q].merge(:lowEquity_true => '0'))

次に、以下の新しいパラメーターになります。これは、更新された q のように見えますが、残りのパラメーターは削除されています。

{"lowEquity_true"=>"0", "s"=>"rate asc"}

代わりに q & merge を他のパラメーターにマージしようとすると、q は更新されず、代わりに q にあったものを他のパラメーターにマージするだけです

rates_url(params[:q].merge(:lowEquity_true => '0').merge(params))

{"freq"=>"weekly", "loan_amount"=>"350000", "lowEquity_true"=>"0",
 "q"=>{"lowEquity_true"=>"1", "s"=>"rate asc"},
 "s"=>"rate asc"}

私はあらゆる種類のさまざまな組み合わせを試しましたが、どこにも到達していないように見えるので、基本的なものが欠けていると確信しています!

4

1 に答える 1

6

それは間違っている。

例を挙げて説明しましょう:

params = {:a => 1, :b => 2, :q => {:x => 24, :y => 25}}

この時点でparams[:q]

{:x=>24, :y=>25}

私が行った場合、

params[:q].merge(:x => 99)

それから私のparams[:q]意志は

 {:x=>99, :y=>25}

これは、引数として指定しているものですrates_url(params[:q].merge(:lowEquity_true => '0'))

そのため、パラメーターとしてのみ{"lowEquity_true"=>"0", "s"=>"rate asc"}が渡さrates_urlれます。

さて、次のようなことをすると

params[:q].merge(:x => 99).merge(params)

その後、元の paramsにマージされる ため、結果は次のようになりparams[:q].merge(:x => 99)ます{:x=>99, :y=>25}{:x=>99, :y=>25}{:a => 1, :b => 2, :q => {:x => 24, :y => 25}}

 {:x=>99, :y=>25, :a=>1, :b=>2, :q=>{:x=>24, :y=>25}}

さて、あなたがすべきことを説明しましょう:-

あなたのパラメータは

{"freq"=>"weekly", "loan_amount"=>"350000",
"q"=>{"lowEquity_true"=>"1", "s"=>"rate asc"}}

したがって、次のことを行う必要があります。

params[:q].merge!(:lowEquity_true => '0')

rates_url(params)

それでおしまい

mergemerge!:- の違いmerge!が破壊的であることを知っていることを願っています。元のパラメーターを変更しmergeますが、変数に入れて使用しない限り変更されません。

あるいは、上記と同じことを 1 行で実行したい場合は、次のようにします。

rates_url(params.merge!(:q => {:lowEquity_true => '0', "s"=>"rate asc"}))

また

rates_url(params.merge(:q => params[:q].merge(:lowEquity_true => '0')))
于 2013-10-11T05:07:59.893 に答える