我是ROR的开始,但这就是我想要实现的目标。我有两件我想要联想的事:事和人。每件事都可以有很多人。也就是说,我想分别创建人员和事务,然后能够将它们联系起来。
例如,我可以创建: 比尔·克林顿 巴拉克奥巴马
我可以创造这些事情: 全球暖化 反恐战争
我希望能够将用户比尔克林顿和巴拉克奥巴马联系起来。有人可以指点我的教程,可以告诉我如何做到这一点吗?
答案 0 :(得分:4)
我认为现在RoR社区越来越少使用has_and_belongs_to_many
。虽然仍然受到支持,但我认为现在更常见的是使用中间模型(在您的情况下类似PoliticianMatter
)来加入Politician
和Matter
模型。
然后,您的politician_matter
表格会有PK,politician_id
和matter_id
。
然后你有
class PoliticanMatter < ActiveRecord::Base
belongs_to :politician
belongs_to :matter
end
这种方法的优点是,如果需要政治家的未来属性 - &gt;物质关系(例如重要性,最后一次出现的日期)你有一个提供这个的模型 - has_and_belongs_to_many
不支持添加这些额外的属性。
您还可以直接从政治家和物质模型中访问多对多关系
class Politician < ActiveRecord::Base
has_many :politician_matters
has_many :matters, :through => :politician_matters
end
class Matter < ActiveRecord::Base
has_many :politician_matters
has_many :politicians, :through => :politician_matters
end
答案 1 :(得分:2)
这两个实体之间需要很多关系。
Rails使用has_and_belongs_to_many
助手来做到这一点。您可以在文档和许多博客文章中找到更多相关内容!
答案 2 :(得分:0)
class Politician < ActiveRecord::Base
has_and_belongs_to_many :tasks
end
class Task < ActiveRecord::Base
has_and_belongs_to_many :politicians
end
您需要的是3张桌子:
politicians, tasks
和politicians_tasks
(包含两列politician_id
和task_id
,没有主键)
希望这会有所帮助 SEB