Ruby On Rails关系 - 一对多

时间:2009-05-10 21:10:36

标签: ruby-on-rails relational

我是ROR的开始,但这就是我想要实现的目标。我有两件我想要联想的事:事和人。每件事都可以有很多人。也就是说,我想分别创建人员和事务,然后能够将它们联系起来。

例如,我可以创建: 比尔·克林顿 巴拉克奥巴马

我可以创造这些事情: 全球暖化 反恐战争

我希望能够将用户比尔克林顿和巴拉克奥巴马联系起来。有人可以指点我的教程,可以告诉我如何做到这一点吗?

3 个答案:

答案 0 :(得分:4)

我认为现在RoR社区越来越少使用has_and_belongs_to_many。虽然仍然受到支持,但我认为现在更常见的是使用中间模型(在您的情况下类似PoliticianMatter)来加入PoliticianMatter模型。

然后,您的politician_matter表格会有PK,politician_idmatter_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助手来做到这一点。您可以在文档和许多博客文章中找到更多相关内容!

has_and_belongs_to_many helper

答案 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, taskspoliticians_tasks(包含两列politician_idtask_id,没有主键)

希望这会有所帮助 SEB