【问题标题】:How to relate multiple models to one model that will rule them all, in Rails?在 Rails 中,如何将多个模型与一个模型相关联?
【发布时间】:2010-10-15 06:47:27
【问题描述】:

假设我有四个完全独立的模型(MovieBookGameAlbum)来控制我在媒体收藏中拥有的东西的类型。有了它们,我可以对单个专辑、电影等进行 CRUD 和标记。

但我需要跟踪,并做一些对所有人都通用的事情。所以我想我需要一个Item 模型,它会给我一个像这样的item 表:

|编号 | item_id |项目类型 |状态 |占有| +----+---------+------------+--------+------------+ | 01 | 01 | 1 | 3 | 2 |

statuspossession 位可以让我跟踪该项目是新的还是使用过的,与我一起还是借给我(在另一张桌子上,借给谁)等等,而桌子本身会让我知道我总共有多少物品。所有这些都没有触及原始的四个模型及其对象,我认为应该只知道它们是什么,而不是我可以对它们做什么。编辑:请注意,每次添加电影或书籍时,它还必须使用其相关信息更新 items 表。

我是一个新手,我有一些关于如何去做的想法,但没有一个被证明是成功的。我知道有很多问题要问,但我想知道,我怎样才能做到这一点?

任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: ruby-on-rails database-design model associations


    【解决方案1】:

    最简单的方法是使用polymorphic association

    【讨论】:

    • 感谢您的提示。我得到了关联工作,但问题是我无法让项目表在添加电影等时使用适当的信息自动更新。我研究了提交给多个模型但没有走远的回调和表单。你会推荐什么?
    【解决方案2】:

    您在 ActiveRecord 中描述多态关联。查看这些网址:

    【讨论】:

    • 感谢您的提示。我得到了关联,但问题是我无法让项目表在添加电影等时使用适当的信息自动更新。我研究了提交给多个模型但没有走远的回调和表单。你会推荐什么?
    【解决方案3】:

    Rails 中的继承(在我看来)还有很多不足之处,因为它只允许单表继承。

    我要做的是将您的每个模型(电影、书籍等)以一对一的关系与一个项目相关联。

    class Book < ActiveRecord::Base
      belongs_to :item
    end
    

    编辑:在查看了多态的东西(老实说,我忘记了 Rails 有的东西)之后,我认为这可能是您正在寻找的更多内容。我的方式可行,但我认为另一种方式会更好。

    【讨论】:

      【解决方案4】:

      属性名称的快速 cmets ...

      “状态”恕我直言太可怕了。可能是“采集类型”。

      “项目类型”还不错,但“媒体类型”可能更合适。

      这是一个关于实体命名约定的非常全面的“最新技术”指南,至少值得一读。 http://www.uscg.mil/directives/ci/5000-5999/CI_5230_42A.pdf

      【讨论】:

      • 感谢您的资源,它会派上用场的。顺便说一句,状态是指物品的状况:新的、二手的、旧的等。但也许条件是一个更好的名字? (我选择 Item_type 是因为我想象在这样的关联中,“外部”字段必须共享相同的“根”。)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 2014-12-14
      • 1970-01-01
      • 2011-05-06
      相关资源
      最近更新 更多