[13]的未定义方法`assign_attributes':数组

时间:2016-12-23 23:29:24

标签: ruby-on-rails ruby

我的应用程序设置为当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。不知道还有什么可以尝试。如果需要更多信息,请与我们联系。

1 个答案:

答案 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