RoR has_and_belongs_to_many

时间:2014-09-03 00:54:06

标签: ruby-on-rails has-and-belongs-to-many

我有两个数据库表,分别是域和类别。

域名可以包含多个类别,类别可以包含多个域名。

使用has_and_belongs_to_many设置两个模型。

逻辑上,当一个类别与一个域相关联时,一个域与一个类别相关联。然而...

irb(main):062:0> domain.categories.any?
=> false
irb(main):063:0> category.domains.any?
=> true

我错过了什么?

1 个答案:

答案 0 :(得分:2)

<强> HABTM

对于后代,您需要进行以下设置:

#app/models/domain.rb
class Domain < ActiveRecord::Base
   has_and_belongs_to_many :categories
end

#app/models/category.rb
class Category < ActiveRecord::Base
   has_and_belongs_to_many :domains
end

#table - categories_domains - category_id | domain_id

这为您提供了在相应对象上调用domain.categoriescategory.domains方法所需的相关关联。


<强>协会

为了向您强调这个想法(因为您是新手),让我详细说明ActiveRecord associations在Rails中的重要性。

Rails是MVC framework,是object orientated。如果你开始这并不意味着什么,但随着你的进步,这将变得非常重要。

Rails的面向对象特性意味着每次要添加一项功能时,您确实需要使用围绕对象。根据MVC convention,您的对象是在Model内构建的(这就是为什么您可以调用Model.new等)

当您关联对象(模型)时,您基本上告诉Rails(通过ActiveRecord),这两个对象是关联的。 AR就是所谓的ORM - object relationship mapper - 这意味着它提供abstraction layer以便您更轻松地调用关联数据:

enter image description here

-

这意味着如果要将两个对象(模型)关联在一起,您基本上需要在各自的模型中定义两个关联,然后在应用程序的其他部分提供功能