加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – 通过link_to合并嵌套参数

发布时间:2020-12-17 03:06:03 所属栏目:百科 来源:网络整理
导读:我正在使用嵌套的params(通过hansack嵌套为q)和普通的params一起在页面上构建链接,当我尝试将嵌套的params与其他params合并时,我很难让两者完美地玩. 例如,如果我有: {"freq"="weekly","loan_amount"="350000","q"={"lowEquity_true"="1","s"="rate asc"}}
我正在使用嵌套的params(通过hansack嵌套为q)和普通的params一起在页面上构建链接,当我尝试将嵌套的params与其他params合并时,我很难让两者完美地玩.

例如,如果我有:

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

并尝试构建一个链接来更改param“lowEquity_true”

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

然后我最终得到了下面的新参数,看起来像是更新了q但是丢掉了其余的参数.

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

如果我改为尝试合并q&合并到其他没有更新q的params,只是将q中的内容合并到其他参数中

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

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

我已经尝试了各种各样的组合,似乎没有任何地方,所以我确信我错过了一些基本的东西!

解决方法

你做错了.

让我用一个例子来解释一下:

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

此时,params [:q]是

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

如果我做,

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

然后我的参数[: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 [: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","s"=>"rate asc"}}

所以,你应该这样做:

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

rates_url(params)

而已

我希望你能说明合并与合并之间的区别! : –
合并!是破坏性的,它将修改原始参数,除非你把它放在一个变量并使用它,否则合并将不会.

或者,如果您想在一行中执行上述相同的操作,那么就这样做

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

要么

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读