2011-08-22 84 views
0

我有以下2种型号:has_and_belongs_to_many允许没有重复

class Order < ActiveRecord::Base 
    has_and_belongs_to_many :products, :uniq => false 
end 

class Product < ActiveRecord::Base 
has_and_belongs_to_many :orders, :uniq => false 
end 

它们被引用表连接orders_products

我想为了能够包含相同的产品更是1个实例,所以当我@order.product_ids = [2,2,2],这意味着添加3次产品与ID 2

结果在@order.product_ids = [2],有无论如何告诉模型,我想重复吗?

回答

2

我不会推荐(不考虑任何使用)你尝试在这里实现关联的方式。尽管2个模型之间存在多种关系,但您要做的是从点1到点2绘制3条线。如果您尝试使用@order.product_ids = [2,3,4],它应该可以正常工作并且有意义。 对于您的情况,如果您想要订购多个产品,您应该在关系表orders_products上添加一些额外的列,表示每OrderProduct的数量。在这种情况下,建议使用has_many而不是habtm关联,因为您可以更好地控制关系表。阅读http://guides.rubyonrails.org/association_basics.html#choosing-between-has_many-through-and-has_and_belongs_to_many

+1

只需重复并澄清以上内容,此处的正确选择就是完整的连接模型,而不是HABTM。通常在问题的用例中,这通常称为与订单和产品关联的“订单项”,并包含“计数”字段。 – tfwright

+0

Right或OrderItem,即一个订单has_many:order_items,以及一个OrderItem has_one:产品以及一个数量。 –