我对这两种关系有疑问,因为我想得太多了,自己也很困惑。
所以它们都涉及一个新表,该新表位于您要加入的两个表之间。
一个简单的 M2M 从其他两个表中获取外键(例如“blog_posts_categories”表将获取 blog_post_id 和 category_id 外键)。然后对于关联,blog_post 和类别模型之间会有 has_and_belongs_to_many 关联,但连接表没有模型。
对于丰富的 M2M,创建了第三个连接表。该表从其他两个表获取外键,而这两个表获取连接表的外键。然后对于 rails 关联,加入的 DOES 得到一个模型,并且它 belongs_to
其他两个对应的模型。而这两个模型has_many
joined table model
我是否接近正确?我认为我的问题是我一直将表格与模型混为一谈,或者至少对于简单的多对多,因为我一直期望应该有一个模型与表格一起使用。
感谢您提供的任何指导。
最佳答案
你对两者的概念理解差不多了。与其将它们视为简单与丰富,我更愿意将它们视为隐含与明确 .
以两个模型为例,Book
和 Author
。
有了 has_and_belongs_to_many
,Rails 会隐式地在您的两个模型之间创建一个连接表。 IE。 books_authors
.
您还可以显式创建连接表,例如 Authorship
,belongs_to
两者。 (Book
和 Author
将拥有 has_many :authorships
。)
在这两种情况下,您的领域模型看起来都一样:
Book (1)--(n) Authorship (n)--(1) Author
现在,这是自以为是的部分。我更喜欢使用显式方法,因为这在概念上更容易掌握,并且可以更轻松地向连接表添加其他字段。例如,假设您希望对 Authorship
进行排序,您可以轻松地将 order
列添加到您的 Authorship
模型并相应地使用它。
关于ruby-on-rails - 多对多:Rails 中的简单与丰富,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29646070/