0

我需要一个单线来生成一个 has_and_belongs_to_many 连接表,否则我将回到 Django 以获得更简单的多对多结构。

rails 3 生成模型 article_tags [..]

Models

# article.rb
has_many :articles_tags
has_many :tags, :through => :articles_tags

# tag.rb
has_many :articles_tags
has_many :articles, :through => :articles_tags

# article_tag.rb
belongs_to :tag
belongs_to :article
4

4 回答 4

3

哦,等等哈哈,我认为这可能会奏效:

rails g model articles_tags article:references tag:references --no-id --no-timestamps

我想知道是否有抑制模型文件的创建(article_tags.rb)以便我可以使用标准的 has_and_belongs_to_many 语法而不必指定 :through 参数?我正在寻找最终的单线:向任何可以改进上述单线以仅使用 has_and_belongs_to_many 语法而不使用连接模型的人的提示!否则,我将回到 Django,它具有内置的 ManyToManyFields。

于 2011-08-02T16:02:49.830 回答
2

听起来您正在寻找标准的 has_and_belongs_to_many:

# article.rb
has_and_belongs_to_many :tags

# tag.rb
has_and_belongs_to_many :articles

您的连接表将被调用articles_tags,并且只需要包含两列,article_id并且tag_id(不需要id列,因为它不是模型)。

这在Rails Guide to Associations中。我强烈建议您熟悉 Rails 指南。

对于生成器来说,这几乎太简单了。您只需要两个空模型类和连接表,它们将在迁移中定义,如下所示:

def self.up
  create_table :articles_tags, :id => false do |t|
    t.integer :article_id
    t.integer :tag_id
  end
end

def self.down
  drop_table :articles_tags
end
于 2011-08-02T09:17:04.550 回答
1

不知道这么长时间后这是否仍然感兴趣,但我想你可以看看https://github.com/zealot128/ruby-habtm-generator:它是一个 Rails 生成器,可以生成正确的迁移HABTM 表。

于 2013-01-04T18:35:54.973 回答
0

使用 generate 将创建两个索引

检查这个答案https://stackoverflow.com/a/9825571/643500

于 2012-03-22T15:52:43.463 回答