【问题标题】:Merge nested params via link_to通过 link_to 合并嵌套参数
【发布时间】:2013-10-11 00:36:39
【问题描述】:

我正在使用嵌套参数(通过嵌套为 q 的 ransack)与普通参数一起在页面上构建链接,当我尝试将嵌套参数与其他参数合并时,我无法让两者很好地发挥作用。

例如,如果我有:

{"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 合并到其他参数中,它不会更新 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"}

我尝试了各种不同的组合,但似乎没有成功,所以我确定我错过了一些基本的东西!

【问题讨论】:

    标签: ruby-on-rails-3 merge nested-attributes params ransack


    【解决方案1】:

    你做错了。

    让我用一个例子来解释:

    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[: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 不会,除非您将其放入变量中并使用它。

    或者,如果您想在一行中执行上述相同的操作,那么只需执行

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2022-11-22
      相关资源
      最近更新 更多