2013-07-12 31 views
0

這些都是我的模型如何設置連接表的額外屬性?

class Product 
    has_many :line_items 
    has_many :orders, :through => :line_items 
end 

class LineItem 
    belongs_to :order 
    belongs_to :product 

    validates :quantity, presence: true 
end 

class Order 
    has_many :line_items 
    has_many :products, :through => :line_items 
end 

我可以做@order.products << @product對產品與訂單相關聯,但我無法弄清楚如何還建立在連接表中的數量。

回答

0

您需要直接創建訂單項並指定其數量和產品。

嘗試這樣的事情

@product = Product.find(1) 
@order.line_items.create(product_id: @product.id, quantity: 100) 
+0

我不得不這樣做'line_items.build',而不是'line_items.create 「讓它起作用,否則這是最簡單的解決方案。 – lala

0

你想用手或通過表單來完成嗎?

如果用手工你只需要找到在LineItem的關係,產品和更新:

x = @order.line_items.last 
x.quantity = 2 

編輯: Baconator507的答案是最快的

1

你可以建立@line_item代替@product然後追加,爲@order的行項目。

@line_item.quantity = 100 
@line_item.product = Product.find(10) 
@order.line_items << @line_item 
0

無需連接表的額外屬性,它已經存在。

Order#line_items # will return all information's you need 

但是,如果你想按照特定的順序返回產品數量試試以下代碼。

首先,attr_accessor :quantity添加quantityProduct.rb

比,刪除以下行has_many :products, :through => :line_itemsOrder.rb創建products方法,而不是

def products 
    products_list = [] 
    line_items.each do |item| 
    item.product.quantity = item.quantity 
    products_list << item.product 
    end 
    products_list 
end 

order = Order.last 
order.products # will return list of products with quantity attribute