没有使用散列将符号隐式转换为整数错误
no implicit conversion of Symbol into Integer Error with hash
我收到错误 "no implicit conversion of Symbol into Integer"
这是我的代码:
# == 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]
self_product 被视为一个数组(或类似数组的东西),因此它需要一个数字索引,而不是您对散列或活动记录实例所期望的符号。
问题在这里:
self_product = Product.where(id: product.id)
这 returns 一个 ActiveRecord 关系对象。在其上使用 [] 运算符将 运行 查询并返回第 n 个项目。
你可能想要这样的东西:
num = Product.find(product.id).stock
但是,如果您的购物车商品与 product
设置正确,则不需要这样做。你应该能够做到:
num = product.stock
我收到错误 "no implicit conversion of Symbol into Integer"
这是我的代码:
# == 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]
self_product 被视为一个数组(或类似数组的东西),因此它需要一个数字索引,而不是您对散列或活动记录实例所期望的符号。
问题在这里:
self_product = Product.where(id: product.id)
这 returns 一个 ActiveRecord 关系对象。在其上使用 [] 运算符将 运行 查询并返回第 n 个项目。
你可能想要这样的东西:
num = Product.find(product.id).stock
但是,如果您的购物车商品与 product
设置正确,则不需要这样做。你应该能够做到:
num = product.stock