Rails 3.2遍历一个数组

cti*_*y79 4 ruby arrays iteration hash ruby-on-rails-3.1

我有一个看起来像这样的数组:

@shipment_products
[
  {"old_qty_shipped"=>"324", "product_id"=>"1", "qty_shipped"=>"12443"}
  {"old_qty_shipped"=>"4343423", "product_id"=>"3", "qty_shipped"=>"321344"}
  {"old_qty_shipped"=>"23", "product_id"=>"4", "qty_shipped"=>"321"}
]
Run Code Online (Sandbox Code Playgroud)

我想最终能够做到这样的事情

@shipment_products.each do |p|
  Product.adjust_qtys(p.old_qty_shipped, p.qty_shipped, p.product_id)
end
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

NoMethodError (undefined method `qty_shipped' for #<ActiveSupport::HashWithIndifferentAccess:0x007f>)
Run Code Online (Sandbox Code Playgroud)

这个数组的格式不是很合适.我需要找到一种方法来迭代键/值并提取属性,以便我可以调用我在模型中创建的方法.有任何想法吗?

Sha*_*h c 10

检查以下代码.

   @shipment_products = [ {"old_qty_shipped"=>"324", "product_id"=>"1", "qty_shipped"=>"12443"}, {"old_qty_shipped"=>"4343423", "product_id"=>"3", "qty_shipped"=>"321344"} , {"old_qty_shipped"=>"23", "product_id"=>"4", "qty_shipped"=>"321"}]

    @shipment_products.each do |p|
      Product.adjust_qtys(p['old_qty_shipped'], p['qty_shipped'], p['product_id'])
    end
Run Code Online (Sandbox Code Playgroud)