ruby 1.8.7 replace params hash



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

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

而且,我使用rails 2.3(我知道它太旧了!),它需要以下语法:

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

我使用此代码来替换params哈希:

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

我解决了整个问题。谢谢大家!

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

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

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

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

这应该有效:

x = {"cart"=>{"1140229"=>["5"], "1140228"=>["4"], "1140222"=>["7"]}}
result = Hash[x['cart'].map {|key, value| [key.to_i, {:quantity => value.first.to_i}]}]
cart = params['cart'].inject({}) do |c, kv| k,v=kv; c.merge({ k => { :quantity => v }}) end

最新更新