如何设置连接表的额外属性?

时间:2013-07-12 17:30:51

标签: ruby-on-rails activerecord

这些是我的模特

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将产品与订单相关联,但我无法弄清楚如何在连接表中设置数量。

4 个答案:

答案 0 :(得分:1)

您可以构建@line_item而不是@product,然后将其附加到@order的订单项。

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

答案 1 :(得分:0)

您想通过手工或表格来实现吗?

如果您需要手动找到LineItem关系中的产品并更新它:

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

编辑: Baconator507的答案是最快的

答案 2 :(得分:0)

您需要直接创建订单项并指定其数量和产品。

尝试这样的事情

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

答案 3 :(得分:0)

无需加入表的额外属性,它已经存在。

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

但是,如果您想按特定顺序退回产品数量,请尝试以下代码。

首先,将quantity添加为attr_accessor :quantityProduct.rb

然后,删除has_many :products, :through => :line_items创建Order.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