使用Has And Belongs To Many关联两个已存在的对象

我正在使用Rails中的应用程序来展示动漫,这些动画已经并且属于许多语言,所以我建立了一个HABTM协会:

class Anime < ActiveRecord::Base has_and_belongs_to_many :languages end class Language < ActiveRecord::Base has_and_belongs_to_many :animes end 

现在我不知道如何在它们之间建立关联,我创建了许多语言记录来使用它们,例如,ID为1的语言为英语,ID为2的语言为西class牙语等…我想要只是在动画和语言之间建立联系,也就是说,如果我想说ID为1的动漫只有西class牙语,那么在表格中animes_languages我想创建值为anime_id: 1language_id: 2的记录language_id: 2 ,仅此而已,但我相信如果我执行命令Anime.find(1).languages.create它将不会使用已有的语言,它将创建一种新语言,但我唯一想做的就是建立关联在现有动画与现有语言之间,所以,我该怎么做? 我应该为表animes_language制作一个模型吗?

这对我来说很困惑,因为当我在这里指定创建该表时,在这里输入链接描述 ,我创建了没有ID的表,它只有字段anime_idlanguage_id

为了安全起见,我会支持它。

首先,您迁移表以删除已存在的关联到一个或另一个引用(即,如果语言已经有许多动画,等等)。

然后,您需要创建一个迁移来创建关联表。

 rails g migration CreateJoinTableAnimeLanguage anime language 

然后模型中的关联指针应该正常工作。

 class Anime < ActiveRecord::Base has_and_belongs_to_many :languages end class Language < ActiveRecord::Base has_and_belongs_to_many :animes end 

此时,只要您想将其中一个与已存在的另一个相关联:

 Anime.find(1).languages << Language.find(1) 

经验建议不要单独尝试这样做。

我会说找到最有创造的东西,我猜Anime ,然后找到一种方法来选择或创建一种语言:

 class AnimeController < ApplicationController def create @anime = Anime.new(anime_params) @success = @anime.save end private def anime_params params.require(:anime).permit(:stuff, :languages => [:id, :or_stuff]) end end 

应该如此简单

 anime = Anime.find(1) language = Language.find(1) anime.languages << language 

这将在两者之间创建联接记录