0

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

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

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

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

我使用此代码替换参数哈希:

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

4 回答 4

1

整个问题都被我解决了。多谢你们!

Cart.update(params[:cart].keys, params[:cart].values.map{ |value| { :quantity => value[0] } })
于 2013-12-05T11:56:44.600 回答
0

这应该有效:

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

result = Hash[x['cart'].map {|key, value| [key.to_i, {:quantity => value.first.to_i}]}]
于 2013-12-05T11:46:19.257 回答
0

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

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

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

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

于 2013-12-05T11:42:04.240 回答
0
cart = params['cart'].inject({}) do |c, kv| k,v=kv; c.merge({ k => { :quantity => v }}) end
于 2013-12-05T11:53:20.443 回答