我的应用程序设置为当product.sold属性为1表示商品已售出且它不会显示在商店视图中。我试图在客户签出时购买,因此在购买商品时会更新product.sold属性。
以下是我的控制器中应该将product.sold属性从nil更新为1的代码行:
class ChargesController < ApplicationController
def create
@order.order_items.map{ |o| o.product.id }.assign_attributes(sold: 1)
end
这是我的协会:
OrderItem belongs_to :product
OrderItem belongs_to :order
Product has_many :order_items
Order has_many :order_items
这是我在尝试购买ID为13
的产品时遇到的错误NoMethodError in ChargesController#create
undefined method `assign_attributes' for [13]:Array
Extracted source (around line #12):
#OrderMailer.order_email(@order).deliver_now
@order.update_attribute(:order_status_id, 2)
@order.order_items.map{ |o| o.product.id }.assign_attributes(sold: 1)
@final_amount = @amount
我也尝试过update_attributes并更新来代替assign_attributes。不知道还有什么可以尝试。如果需要更多信息,请与我们联系。
答案 0 :(得分:4)
您正在尝试在产品ID数组上调用assign_attributes
,而不是模型。试试这个:
def create
product_ids = @order.order_items.map{ |o| o.product.id }
Product.where(id: product_ids).update_all(sold: 1)
end