ruby-on-rails-3 – 通过link_to合并嵌套参数
我正在使用嵌套的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'))) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 知道这20个正则表达式,能让你少写1,000行代码
- swift – 创建透明渐变并将其用作SpriteKit中的alpha掩码
- ajax – primefaces p:selectBooleanButton监听器未在嵌套
- ruby-on-rails – Rail3 rake测试任务未运行测试
- sqlite3.exe使用教程
- ruby-on-rails – Rails i18n默认值
- objective-c – 如何检查UIViewController当前是否正在显示
- 正则表达式
- ruby-on-rails – ActiveRecord和Mogoid :: Document:asso
- ruby – 在数组上使用累加器映射