Rails 3 HABTM单线

时间:2011-08-02 08:11:51

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

我需要一个单行代码来生成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 个答案:

答案 0 :(得分:3)

哦,等等哈哈,我想这可能就是这个伎俩:

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

我想知道是否还有压制模型文件的创建(article_tags.rb),这样我就可以使用标准的has_and_belongs_to_many语法而无需指定:通过参数?我正在寻找最终的单线程:对于任何能够改进上述单线程以使仅使用has_and_belongs_to_many语法而无需连接模型的人来说!另外,我将回到Django,它内置了ManyToManyFields。

答案 1 :(得分: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_idtag_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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

使用generate将创建两个索引

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