0

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

例如,我可以创建:Bill Clinton Barack Obama

我可能会制造问题:全球变暖 反恐战争

我希望能够将用户 Bill Clinton 和 Barack Obama 与这两件事联系起来。有人可以指点我一个可以告诉我如何做到这一点的教程吗?

4

3 回答 3

4

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

然后你的politician_matter桌子会有一个PK,一个politician_id和一个matter_id

然后你有

class PoliticanMatter < ActiveRecord::Base
  belongs_to :politician
  belongs_to :matter
end

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

您还可以像这样直接从 Politician 和 Matter 模型访问多对多关系

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
于 2009-05-10T22:00:23.297 回答
2

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

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

Rails 使用has_and_belongs_to_manyhelper 来做到这一点。您可以在文档和许多博客文章中找到更多相关信息!

has_and_belongs_to_many 帮手

于 2009-05-10T21:13:31.487 回答
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

于 2009-05-10T21:19:21.897 回答