我見過的大多數繼承問題都假設子類具有與超類不同的屬性。例如,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(..)
?我所做的很醜陋;)。