ruby-on-rails - 多对多:Rails 中的简单与丰富

标签 ruby-on-rails ruby-on-rails-4 model many-to-many associations

我对这两种关系有疑问,因为我想得太多了,自己也很困惑。

所以它们都涉及一个新表,该新表位于您要加入的两个表之间。

一个简单的 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

我是否接近正确?我认为我的问题是我一直将表格与模型混为一谈,或者至少对于简单的多对多,因为我一直期望应该有一个模型与表格一起使用。

感谢您提供的任何指导。

最佳答案

你对两者的概念理解差不多了。与其将它们视为简单丰富,我更愿意将它们视为隐含明确 .

以两个模型为例,BookAuthor

有了 has_and_belongs_to_many,Rails 会隐式地在您的两个模型之间创建一个连接表。 IE。 books_authors.

您还可以显式创建连接表,例如 Authorshipbelongs_to 两者。 (BookAuthor 将拥有 has_many :authorships。)

在这两种情况下,您的领域模型看起来都一样:

Book (1)--(n) Authorship (n)--(1) Author

现在,这是自以为是的部分。我更喜欢使用显式方法,因为这在概念上更容易掌握,并且可以更轻松地向连接表添加其他字段。例如,假设您希望对 Authorship 进行排序,您可以轻松地将 order 列添加到您的 Authorship 模型并相应地使用它。

关于ruby-on-rails - 多对多:Rails 中的简单与丰富,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29646070/

相关文章:

Mysql2::Error: 不正确的字符串值

javascript - 在rails表单中填写数据时如何在英语和其他语言之间切换

ruby-on-rails - rails database.yml 不接受 ERB

Json 到 Gson - 建模

ruby - 如何拥有允许重复的有序模型关联

mysql - Rails : differences in db/schema. rb - null: false at created_at/updated_at 列

ruby-on-rails - 使用数组作为 foreign_id 的 Rails 关联

javascript - 如何使用 i18n 值将 coffeescript 中的字符串国际化?

ruby-on-rails - rails 4 中的多个数据库连接

javascript - ExtJS模型的代理