2011-08-22 140 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:產品以及一個數量。 –