2011-08-21 135 views
0

让我们先看看我的数据库模式,这是一个数据库表的简单结构,如下所示。将多个模型与模型关联

page table (id, title, description, link) 
post table (id, body) 
list table (id, name) 
user table (id, uname, upawd) 
tag table (id, name) 

tag_item (tag_id, item_id, item_type) 

tag_item的数据行会是这样的。

tag_id item_id item_type  
1  1   page 
1  2   page 
1  1   post 
2  1   user 
3  1   list 

item_typetag_item表作为相关的表名和表的主键ID item_id场,换句话说,我想利用标签作为关键字的所有表的关联。 那么,如何在单独的模型类中编写代码来将对方与标签相关联。 如何使用rails的方式设计类模型中的关联。

在此先感谢。

+0

你也有一个'type'表? – Behrang

+0

没有'type'表,'type'字段在tag_item表中。该字段主要用于标记“page”之类的对象类型。 'post','user'等等。这意味着我上面的每个对象都有它的标签,我们创建一个用于存储所有标签的标签表,并且需要一个像'tag_item'这样的表来关联所有对象表和标签表 – coolesting

+0

但是您也有'type_id'。你最好创建一个'type'(实际上在rails表中名字应该是复数,所以你需要'types')表,就像'types(id,name)'一样,在你的'tag_items'表中引用它就像'tag_items(tag_id,type_id )'。 – Behrang

回答

1

您可以使用has_many :through来实现关联:

class Type < ActiveRecord::Base 
    has_many :tag_items 
    has_many :tags, :through => :tag_items 
end 

class Tag < ActiveRecord::Base 
    has_many :tag_items 
    has_many :types, :through => :tag_items 
end