我见过的大多数继承问题都假设子类具有与超类不同的属性。例如,Person
可能是超级类,而Driver
是子类,其中Driver
已包含所有内容Person
加上了license_type
字段。Rails 3.1没有表继承的模型继承
我在问一个稍微不同的问题。我有一个超类,叫它Entity
,并且Entity
有一个object_type
字段,描述我们有什么类型的Entity
。所有类型都具有相同的字段,但每种类型的行为稍有不同。例如,对于不同的Entity
类型,add
方法是不同的。
我目前的解决方案是子类Entity
每当我取一个Entity
(例如,在find()
或where(..)
),我请entity = entity.becomes(eval("Entity#{entity.object_type}"))
。这很难看,并且效果不好,例如url_for
和form_for
将调用未定义的方法,因为类类型为Entity<Type>
,而不是Entity
。
我该如何去做一个没有表继承的模型继承,例如url,路径,表单和其他所有东西仍然按照描述工作?也许有一种方法可以让我避免拨打.becomes(..)
?我所做的很丑陋;)。