2

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

但我需要跟踪,并做一些共同的事情,所有这些。所以我想我需要一个Item模型来给我这样的表格item

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

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

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

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

4

4 回答 4

5

最简单的方法是使用多态关联

于 2009-03-24T18:29:43.943 回答
4

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

于 2009-03-24T18:34:16.443 回答
2

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

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

class Book < ActiveRecord::Base
  belongs_to :item
end

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

于 2009-03-24T18:29:39.590 回答
0

对属性名称的快速评论...

“状态”是恕我直言可怕。也许是“采集类型”。

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

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

于 2009-03-24T19:45:29.970 回答