ruby 1.8.7替换params hash

时间:2013-12-05 11:37:54

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

我使用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应用程序移到新版本中)?

4 个答案:

答案 0 :(得分:1)

我解决了整个问题。谢谢,伙计们!

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

答案 1 :(得分:0)

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

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

update_params = x["cart"].collect do |k, v|
 {k => {:quantity => v}}
end

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

答案 2 :(得分:0)

这应该有效:

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

result = Hash[x['cart'].map {|key, value| [key.to_i, {:quantity => value.first.to_i}]}]

答案 3 :(得分:0)

cart = params['cart'].inject({}) do |c, kv| k,v=kv; c.merge({ k => { :quantity => v }}) end