我使用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