【问题标题】:Ruby On Rails Relationships - One to ManyRuby On Rails 关系 - 一对多
【发布时间】:2009-05-10 21:10:35
【问题描述】:

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

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

我可以创建问题: 全球暖化 反恐战争

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

【问题讨论】:

    标签: ruby-on-rails relational


    【解决方案1】:

    我认为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
    

    【讨论】:

      【解决方案2】:

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

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

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

      has_and_belongs_to_many helper

      【讨论】:

        【解决方案3】:
        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,没有主键)

        希望这会有所帮助 赛博

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多