【发布时间】:2009-05-10 21:10:35
【问题描述】:
我是 ROR 的新手,但这就是我想要实现的目标。我有两个要关联的项目:事物和人。每件事可以有很多人。也就是说,我想分别创建人和事,然后再将它们联系起来。
例如,我可以创建: 比尔·克林顿 巴拉克奥巴马
我可以创建问题: 全球暖化 反恐战争
我希望能够将用户 Bill Clinton 和 Barack Obama 与这两件事联系起来。有人可以指点我一个可以告诉我如何做到这一点的教程吗?
【问题讨论】:
我是 ROR 的新手,但这就是我想要实现的目标。我有两个要关联的项目:事物和人。每件事可以有很多人。也就是说,我想分别创建人和事,然后再将它们联系起来。
例如,我可以创建: 比尔·克林顿 巴拉克奥巴马
我可以创建问题: 全球暖化 反恐战争
我希望能够将用户 Bill Clinton 和 Barack Obama 与这两件事联系起来。有人可以指点我一个可以告诉我如何做到这一点的教程吗?
【问题讨论】:
我认为has_and_belongs_to_many 现在越来越少被 RoR 社区使用。虽然仍然受支持,但我认为现在更常见的是让中间模型(在您的情况下类似于 PoliticianMatter)加入您的 Politician 和 Matter 模型。
那么您的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
【讨论】:
您需要在这两个实体之间建立多对多关系。
Rails 使用 has_and_belongs_to_many 助手来做到这一点。您可以在文档和许多博客文章中找到更多相关信息!
【讨论】:
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,没有主键)
希望这会有所帮助 赛博
【讨论】: