Rails - 如何在多对多关系中链接两个现有记录?

时间:2014-01-21 02:01:48

标签: ruby-on-rails many-to-many

所以说我的关系如下。

class TextbookAssociation < ActiveRecord::Base
    belongs_to :textbook
    belongs_to :course
end

class Textbook < ActiveRecord::Base
    has_many :textbook_associations
    has_many :courses, through: :textbook_associations
end

class Course< ActiveRecord::Base
    has_many :textbook_associations
    has_many :textbooks, through: :textbook_associations
end

如果我在各自的表中已经有数据库中的教科书和课程,有没有办法链接它们?

我知道如何做的唯一方法是在创建其中一个对象时。假设我有一门课程,然后为我的课程制作一本教科书

course.textbooks.build(params)
course.save;

这将创建教科书并将其链接到TextbookAssociation表中的课程。

但是如果课程和教科书已经存在呢?我通过在线搜索找不到任何内容。

1 个答案:

答案 0 :(得分:4)

当我试图找到如何做到这一点时,我搜索了互联网,以了解如何查询如“Rails如何链接多对多关系中的两个记录”。所有结果都提出了如何在模型中实际建立关系,而不是如何使用它们。

在写这个问题时,我随机回忆了数组的<<运算符。我不记得它到底做了什么,但我认为它附加到一个数组然后我只需要保存它。所以我试了一下。

course.textbooks << textbook

我发现这实际上是将教科书添加到关联中并将其全部保存在一起。而已。简单!我只是希望我能在Google上找到一些相关信息。

稍后我查找了CollectionProxy的文档,并在此处找到了<<运算符:RoRDocs

我应该早点看到那里,但作为一个Rails newb我没有想到它。

我希望这个问题会出现在一些谷歌搜索结果中,这样可以帮助一些像我这样苦苦挣扎的人。