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

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

我正在使用嵌套参数(通过作为 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"}

我已经尝试了各种不同的组合,但似乎没有任何进展,所以我确定我错过了一些基本的东西!

最佳答案

你做错了。

让我用一个例子来解释:

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)

就是这样

我希望你知道 merge 之间的区别和 merge! :-merge!是破坏性的,它将修改原始参数,如merge除非你把它放在一个变量中并使用它,否则不会。

或者,如果您想在一行中执行上述相同的操作,则只需执行
rates_url(params.merge!(:q => {:lowEquity_true => '0', "s"=>"rate asc"}))

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

关于ruby-on-rails-3 - 通过 link_to 合并嵌套参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19308459/

相关文章:

ruby-on-rails - Nginx 和 Unicorn 上的 resources_url 出现意外行为

merge - TFS 丢弃不适用于回滚变更集

c++ - 递归部分解释

git - 如何使用 SmartGIT 在一次提交中将多个提交从分支 merge 到主控?

ruby-on-rails - 在 Cucumber/Capybara 中使用子域的问题

sql - 两个表都需要使用 "where"进行 RoR 表连接

ruby-on-rails - 您可以编辑/更新也是嵌套属性的多态模型吗?

ruby-on-rails - 如何在Rails中序列化嵌套模型?

ruby-on-rails - Rails 5 - 具有嵌套属性的 find_or_create_by

css - rails - 在生产模式下找不到 application.css Assets