2017-04-08 83 views
0

我得到的错误“符号的隐式转换成整数”符号的隐式转换为整数错误与哈希

这里是我的代码:

# == Schema Information 
# 
# Table name: my_payments 
# 
# id    :integer   not null, primary key 
# email   :string 
# ip    :string 
# status   :string 
# fee    :decimal(6, 2) 
# paypal_id  :string 
# total   :decimal(8, 2) 
# created_at  :datetime   not null 
# updated_at  :datetime   not null 
# shopping_cart_id :integer 
# 

class MyPayment < ActiveRecord::Base 
    belongs_to :shopping_cart 
    include AASM 

    aasm column: "status" do 
     state :created, initial: true 
     state :payed 
     state :failed 

     event :pay do 
      after do 
       shopping_cart.pay! 
       self.update_stock_products() 
      end 
      transitions from: :created, to: :payed 
     end 
    end 

    def update_stock_products  
     self.shopping_cart.in_shopping_carts.map { |i_sh| 
      product = i_sh.product 
      self_product = Product.where(id: product.id) 
      num = self_product[:stock] 
      res = num - i_sh.num_products 
      Product.update(product.id,stock: res)     
     }  
    end 
end 

的错误是在该行:

num = self_product[:stock] 

回答

2

self_product被视为一个数组(或类似数组的东西),因此它期望的是一个数字索引,而不是像对散列或活动记录实例所期望的那样符号。

问题就在这里:

self_product = Product.where(id: product.id) 

这会返回一个ActiveRecord关系的对象。使用[]运算符将运行查询并返回第n个项目。

你可能想是这样的:

num = Product.find(product.id).stock 

但是,如果您有购物车项目协会product设置权,你不应该需要做的。你应该可以这样做:

num = product.stock 
+1

真棒老人感谢了很多,与num = product.stock合作呵呵!我在哪里给你啤酒的?哈哈谢谢!!! –

+0

对我有一个庆祝啤酒:D – mahemoff

相关问题