0

我正在阅读一本 ror 初学者书籍,它有这个参考示例:

class Article < ActiveRecord::Base
  attr_accessible :body, :excerpt, :location, :published_at, :publisher, :title

  validates :title, :presence => true
  validates :body, :presence => true

  belongs_to :user
  has_and_belongs_to_many :categories
end

class Category < ActiveRecord::Base
  attr_accessible :name

  has_and_belongs_to_many :articles
end

所以这两个模型意味着通过 habtm 以两种方式连接,就像上面的代码一样。但是,这本书也告诉我我应该提供这样的迁移:

class CreateArticlesCategories < ActiveRecord::Migration
  def up
        create_table :articles_categories, :id => false do |t|
        t.integer :article
        t.integer :category
    end
  end

  def down
    drop_table :articles_categories
  end
end

我的问题:为什么?为什么我需要创建此迁移而不是模型articles_categories?

4

1 回答 1

2

tl;博士; 使用 a 时需要额外的模型,关联has_many through不需要它habtm

has_and_belongs_to_many当您并不真正关心中间的表格(这里是articles_categories)时,应该使用该关联。我所说的“不”真正关心的是,此表中不需要额外的数据。它只是在这里告诉您哪些类别与给定文章相关,以及哪些文章与给定类别相关。为此,has_and_belongs_to_many关联非常重要,因为您不必创建模型,它只需要连接表。

如果不知何故您需要该表中的一些额外数据,例如标签、日期、状态或任何东西,那么拥有一个专用模型将非常方便,因此您可以显式地操作它。对于这些情况,您应该使用has_many :through 关联

如果您需要更多信息,我建议您阅读有关关联的 Rails 指南,这是一个好的开始。当然,如果我的解释不够清楚,请告诉我,我会添加更多细节。

于 2013-04-12T21:08:49.390 回答