首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby On Rails关系-一对多

Ruby On Rails关系-一对多
EN

Stack Overflow用户
提问于 2009-05-10 21:10:36
回答 3查看 1K关注 0票数 0

我是ROR的初学者,但这是我试图实现的目标。我有两个想要关联的项目:事物和人。每一件事都可以有很多人。也就是说,我希望单独创建人员和事物,然后能够将它们链接起来。

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

我可能会创造一些东西:全球变暖,反恐战争

我希望能够将用户比尔·克林顿和巴拉克·奥巴马与这两个问题联系起来。有没有人能给我指个指南,教我怎么做?

EN

回答 3

Stack Overflow用户

发布于 2009-05-10 22:00:23

我认为现在RoR社区越来越少使用has_and_belongs_to_many。虽然仍然支持,但我认为现在更常见的是有一个中间模型(在您的例子中类似于PoliticianMatter)来连接您的PoliticianMatter模型。

然后,您的politician_matter表将有一个PK、一个politician_id和一个matter_id

然后你就有了

代码语言:javascript
复制
class PoliticanMatter < ActiveRecord::Base
  belongs_to :politician
  belongs_to :matter
end

这种方法的优点是,如果需要政治家-> matter关系的未来属性(例如,重要性、上次发生的日期),您有一个提供此功能的模型- has_and_belongs_to_many将不支持添加这些额外属性。

您还可以直接从政治家和物质模型访问多对多关系,如下所示

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2009-05-10 21:13:31

您需要在这两个实体之间建立many2many关系。

  • 一件事可以被很多人研究
  • 一个人可以研究几件事

Rails使用has_and_belongs_to_many助手来实现这一点。你可以在文档和许多博客文章中找到更多关于这方面的信息!

has_and_belongs_to_many helper

票数 2
EN

Stack Overflow用户

发布于 2009-05-10 21:19:22

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/846114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档