2011-10-13 162 views

回答

7

是的,你需要連接表。 這顯示了:http://railscasts.com/episodes/47-two-many-to-many

這也可能有幫助; has_many :through questions

通過,如果你需要的條件進行搜索,這將有助於方式:Has many through associations with conditions

也很大,例如與Rails nested form with has_many :through, how to edit attributes of join model?編輯連接表的嵌套屬性的代碼。

所有這些事情,你可能會發現自己想要做:)

指數是可選的,也是由DB改變排序。 mySQL曾經一次只支持1個。不知道這是否改變。

+0

好酷,我看了這個railscast。有點困惑 - 他是否通過遷移顯式創建了連接表,或者通過模型創建has_many,然後使用db:migrate自動創建連接表? –

+0

除非遷移或模式文件告訴它,否則不會創建表。 – bricker

+0

因此,通過創建連接模型,然後遷移...創建「連接表」?還是我仍然需要做rails遷移events_model_join的事情? –

1

這取決於您想如何使用has_many :through關係。有兩種不同的情況下(在guide to relations

  1. 對於n命名爲:米關係:引導在該示例中是醫師有約會與患者
  2. 爲1:n和另外的1:N的關係:指南中的示例是1個文檔有很多部分,1個部分有很多段落

對於第一個,你需要連接表,你不需要索引。對於第二個,你不需要他們

+0

我不會說第二個例子不需要連接表。 「Sections」在技術上是Document和Paragraphs之間的連接表,即使將它想象爲「連接表」,也是很奇怪的。 – bricker

+0

所有我想說的是取決於'has_many:through'的用法,您將需要一個連接表或不連接。如果一個文檔有很多節,並且每個節都有很多段落,那麼你首先獨立創建了模型,然後在模型中添加了關係has_many和belongs_to。稍後,您添加快捷方式'has_many:through'以直接從文檔中獲取所有段落。我不會將sections表命名爲連接表,但是從代碼中,有一個'has_many:through'關係。 – mliebelt

相關問題