2016-02-10 42 views
3

作爲Ruby on Rails的新手,我正在瀏覽Rails指南,今晚是Active Record Migrations。使用遷移或模型創建連接表?

整理上聯接表(http://guides.rubyonrails.org/active_record_migrations.html#creating-a-join-table)的部分後,我留下的印象是使用create_join_table好(也是簡單的)比創建連接表通過軌生成模式

這是一個正確的假設嗎?我應該知道的細微差別?

+0

謝謝,我不知道這種方法 –

回答

5

使用類別和產品導向的例子:

連接表透明地工作。您只能使用兩個現有型號(CategoryProduct),並且僅爲了啓用它們之間的HABTM關係而存在連接表,因此您可以撥打category.productsproduct.categories,而且這些工作正常。

生成模型,在另一方面,如果你需要與聯想作爲一個獨特的事情在您的應用程序的工作只會是必要的(例如,如果你需要做的事情有Categorization直接)。

對比度has_and_belongs_to_many關聯的軌道導軌描述(read more):

甲has_and_belongs_to_many關聯會在與另一模型的直接許多一對多 連接,而沒有中間模型。例如, 如果您的應用程序包括組件及零部件,具有許多零件和出現在許多組件,每個部分 每個裝配,你 可以這樣聲明型號: enter image description here

與一個has_many :through協會(read more):

甲的has_many:通過關聯通常用於 建立與另一個模型一個多到許多連接。該關聯表示通過繼續執行第三個 模型,可以將聲明模型與 零個或多個其他模型的實例進行匹配。例如,考慮一種醫療實踐,其中患者通過 任命去看醫生。相關協會的聲明 看起來是這樣的: enter image description here

所以,是的,你是正確的,create_join_table會比創建關聯的模型簡單。您還可以看到this answer作爲這些方法之間差異的另一種解釋。

+0

感謝您的解釋。這是完全合理的。 MVC對我來說是一個新概念,但我認爲我明白了。 – Eric

2

正如文件提到...

遷移方法create_join_table創建HABTM連接表

-

當你創建一個has_and_belongs_to_many關係,你只需要連接表(無模式)。

has_and_belongs_to_many連接表是不同has_many :through,因爲他們沒有一個idprimary_key); has_many :through是爲了表示臨時模型,所以每個「記錄」應該具有唯一的標識符。

因此,關於創建連接rails g model是否更好的問題是錯誤的。 has_and_belongs_to_many沒有綁定模型。如果您使用的是has_many :through,則可以使用rails g model沒問題。