Ruby on rails 具有不同行为的Rails多态关联

Ruby on rails 具有不同行为的Rails多态关联,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我想创建一个多态队列关联。我脑子里有两个不同的队列,一个是关于创建建筑,一个是关于创建单元 尽管队列有许多相同的属性,比如添加或删除项目,但也存在一些差异 例如,建筑有标高,而单元没有。QueuedItem多态类通常有一些方法,比如remove方法。但是,删除方法不同,具体取决于项目是建筑还是单元,并且需要不同的处理 此外,级别列对于陆军排队的项目来说是完全不重要的 所以,我的问题是,基于这些需求,设计它的最佳方式是什么?我是否应该继续使用3种模型,如(排队的项目始终属于某个城市): 或者我需要

我想创建一个多态队列关联。我脑子里有两个不同的队列,一个是关于创建建筑,一个是关于创建单元

尽管队列有许多相同的属性,比如添加或删除项目,但也存在一些差异

例如,建筑有标高,而单元没有。QueuedItem多态类通常有一些方法,比如remove方法。但是,删除方法不同,具体取决于项目是建筑还是单元,并且需要不同的处理

此外,级别列对于陆军排队的项目来说是完全不重要的

所以,我的问题是,基于这些需求,设计它的最佳方式是什么?我是否应该继续使用3种模型,如(排队的项目始终属于某个城市):


或者我需要添加更多的中间模型?您认为如何?

您可以创建一个
模块,该模块具有添加/删除队列的逻辑,并将其包含在这两个类中。如果您计划在许多类中使用它,您还可以将其移动到插件中,并将助手添加到将作为队列实现的模型中。

根据您的描述,似乎您实际上需要队列本身的类,而不仅仅是队列中的项。因此,队列相关的方法和操作进入队列类,而仅与建筑物或单元相关的内容进入这些类

队列类将只包含用于添加、删除和可能重新排序其元素的方法,所有这些都不太可能需要不同类型对象的不同实现。这些方法最好除了添加或从队列中删除之外没有任何副作用-例如,如果您需要在删除对象后发生其他事情,这可以由queue#remove的调用者完成。如果您需要队列本身根据它们是否包含建筑物或单元而表现出不同的行为,那么您需要BuildingQueue和UnitQueue,这两个队列都可以从基本队列类或包含的队列模块继承它们的通用方法


其他特定于建筑和单位的东西(比如它们是否有等级,或者它们的具体属性是什么)将进入建筑和单位类中。他们不需要知道队列的任何行为。

是的,这就是我今天所想的,我认为这可能是最好的方法。但是你认为队列应该是一个具体的类吗?我认为把它做成一个mixin模块可能更好,你同意吗?然后,具体的模型BuildingQueue将继承。我有点喜欢这样。在这种情况下,基类或混合模块都可以正常工作。使用您最喜欢的方法:)。
Building
Unit
QueuedItem -> queued_id, queued_type, city_id