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