我是否需要手动为HABTM连接表创build迁移?
我正在努力让HATBM正常工作。 我有一个殴打scanario:文章和标签。 我认为,HABTM应该在这里使用,因为它是一个多对多的关系。 我不知道是否应该手动创build一个连接表(在这种情况下articles_tags)。
我的代码目前如下:
class Article < ActiveRecord::Base has_and_belongs_to_many :tags end class Tag < ActiveRecord::Base has_and_belongs_to_many :articles end
当我运行迁移时,没有创build第三个表。 另外,我想补充说,我的第三张表不承担任何域逻辑,只是盲目的分配。
我正在使用Rails 2.2.2
您应该在其中一个表的迁移中执行此操作,如果已经迁移了这些迁移操作,则应该在单独的迁移中执行此操作:
create_table :articles_tags, :id => false do |t| t.references :article, :tag end add_index :articles_tags, [:article_id, :tag_id]
这将为您创build表,并且:id => false
告诉Rails不要向此表中添加一个id字段。 还有一个索引,这将加快查找这个连接表。
您也可以为此生成一个模型(ArticlesTag),并执行以下操作:
# 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
然后在script/generate model articles_tag
调用script/generate model articles_tag
的迁移中创build表。
请注意,这包括在API中。
您可能还想要为迁移添加一个索引:
add_index“articles_tags”,“article_id”
add_index“articles_tags”,“tag_id”
不过,如果你想标记function,我会推荐acts_as_taggable_on rails插件:
http://www.intridea.com/tag/acts_as_taggable_on http://github.com/bloigh/acts-as-taggable-on/
我已经在一个项目上使用它,它很容易实现。
用于标记的连接表的一个问题是,它可能很容易地为每个想要制作标记的内容types(即comments_tags,posts_tags,images_tags等)创build一个连接表。 这个插件使用标签表,其中包括一个鉴别器来确定内容types,而不需要每种types的特定连接表。
结合这个Qeuestion(1st answear) 如何从这里设置一个典型的用户HABTMangular色关系和第一个answear,甚至必须被一只猴子理解。 我是RoR的新人,而且它的魅力正在发挥