2016-12-23 12 views
3

私のアプリは、product.sold属性が1の場合、アイテムが売却され、ストアビューに表示されないことを意味します。私は顧客が商品を購入したときにproduct.sold属性が更新されたことをチェックアウトするときにそれを取得しようとしています。ここで[13]のための未定義メソッド `assign_attributes ':配列

1にゼロからproduct.sold属性を更新する必要があり、私のコントローラ内のコードの行である:ここ

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 

はエラーです私がid13の製品を購入しようとしているときに取得しています

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 

assign_attributesの代わりにate_attributesとupdateを実行します。他に何を試すかわからないもっと情報が必要な場合はお知らせください。

+0

このように、各アイテムに属性を設定しますか? –

答えて

4

assign_attributesは、製品IDの配列ではなくモデルであることを呼び出そうとしています。これを試してみてください:

def create 
    product_ids = @order.order_items.map{ |o| o.product.id } 
    Product.where(id: product_ids).update_all(sold: 1) 
end 
関連する問題