2015-09-09 52 views
1

相當新的鐵路和試圖瞭解在未來之前使用哪些關係。HMT或HABTM的訂單和項目

我有兩個型號:ordersitems。這是一種多對多的關係,但我不確定要使用哪種關係。

訂單可能有交貨時間,項目的數量等

最後,你會調用模型使用HMT加入ordersitems如果?

+0

你需要能夠倒退:給定一個項目,它會出現什麼命令?如果是這樣,這是HABTM的經典案例,這裏有一個完美的例子:http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association – Daiku

+0

而默認連接表將被命名爲items_orders(字母順序) – Daiku

+1

要使用哪一個? http://guides.rubyonrails.org/association_basics.html#choosing-between-has-many-through-and-has-and-belongs-to-many – Daiku

回答

3

如果您需要了解任何關於該項目的特定順序的關係,你需要HMT

如果您的產品將來會改變價格,您是否想知道過去在訂單上銷售了多少?

在這種類型的需求中,我總是有一個訂單的許多「LineItem」記錄,而line_item實例屬於這個項目和訂單,並記錄該訂單的定價和/或數量。

HMT vs HABTM?有幾次,所有你需要的是多對多的,我幾乎總是會與HMT一起去增加更多的信息給協會。

-1

這看起來像是一個經典的HABTM案例,example given in the Rails Guides是完美的。選擇歸結爲在連接模型本身上是否需要任何其他數據或邏輯。如果是這樣,那麼使用HMT,您將在其中創建第三個active_record模型作爲連接表。你可以命名你想要的任何東西。但看起來HABTM會爲你工作,並且你需要設置的所有內容都是在遷移過程中使用默認名稱(items_orders)的連接表,並且rails會爲你處理所有其他事情。

class Order < ActiveRecord::Base 
    has_and_belongs_to_many :items 
end 

class Item < ActiveRecord::Base 
    has_and_belongs_to_many :orders 
end