2011-10-13 155 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

相关问题