【问题标题】:ruby 1.8.7 replace params hash [closed]ruby 1.8.7替换参数哈希[关闭]
【发布时间】:2013-12-05 11:37:54
【问题描述】:

我使用 ruby​​ 1.8.7 并从我的表单中获取参数,如下所示:

 "cart"=>{"1140229"=>["5"], "1140228"=>["4"], "1140222"=>["7"]}

而且,我使用的是 rails 2.3(它太旧了,我知道!)它需要这种语法:

1140229 => { :quantity => 5 }, 1140228 => { :quantity => 4 }, 1140222 => { :quantity => 7 }

我用这段代码来替换params hash:

params[:cart].each{ |k,v| params[:cart][k] = { :quantity => v[0] } }
Cart.update(params[:cart].keys, params[:cart].values)

如何在 1.8.7 和 1.9.3 中替换此代码(我将很快将我的 rails 应用程序迁移到新版本)?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-2 ruby-1.8.7


    【解决方案1】:

    我解决了整个问题。谢谢各位!

    Cart.update(params[:cart].keys, params[:cart].values.map{ |value| { :quantity => value[0] } })
    

    【讨论】:

      【解决方案2】:

      即使是旧的 ruby​​ 版本,您也可以使用它。

      x = {"cart"=>{"1140229"=>["5"], "1140228"=>["4"], "1140222"=>["7"]}}
      
      update_params = x["cart"].collect do |k, v|
       {k => {:quantity => v}}
      end
      

      事实上,您的问题与较新的 Rails 版本无关。这可以通过核心 Ruby 来实现。

      【讨论】:

      • 谢谢,但我需要 1 个字符串解决方案
      • 虽然不会产生哈希..
      【解决方案3】:

      这应该可行:

      x = {"cart"=>{"1140229"=>["5"], "1140228"=>["4"], "1140222"=>["7"]}}
      
      result = Hash[x['cart'].map {|key, value| [key.to_i, {:quantity => value.first.to_i}]}]
      

      【讨论】:

        【解决方案4】:
        cart = params['cart'].inject({}) do |c, kv| k,v=kv; c.merge({ k => { :quantity => v }}) end
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-06-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-21
          • 2014-04-12
          • 1970-01-01
          • 2022-01-10
          相关资源
          最近更新 更多