我想我要完成的是多表繼承,但我不知道如何正確地實現它。Rails活動模型繼承
我想從基類Device
開始,它將包含所有常用字段,如名稱和啓用。
class Device
# in app/models
# Fields
# String name
# boolean enabled
end
我然後要爲不同的設備類型如Light
從Device
class Light < ActiveRecord:Base
# in app/models
# Fields
# String type
include Device
def on
raise NotImplementedError
end
def off
raise NotImplementedError
end
end
繼承然後我將具有適用於特定裝置如X10Light
和ZWaveLight
將定義的類創建抽象類每個設備的具體細節並實現抽象方法。然後
class X10Light < Light
# in app/models
# Fields
# String serial_number
def on
# fully implemented on method
end
def off
# fully implemented off method
end
end
我的目標是使用它像下面
light1 = X10Light.new
light1.serial_number = "x1"
light1.save
light2 = ZWaveLight.new
light2.serial_number = "z1"
light2.save
all_lights = Light.all
all_lights.each do |light|
light.off
end
我想我已經計劃好了的事情,這是可能的方式,但我覺得有一些不正確的執行。我會很感激任何幫助減少這方面的細節。謝謝!
在紅寶石中,不要做'def on raise NotImplementedError end' ---而是讓你的類不是'respond_to:on'。 – 2013-04-20 18:14:31