我认为我想要完成的是多表继承,但我不确定如何正确实现它。
我想从一个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
我认为我计划事情的方式是可能的,但我认为有些实施不正确。我将不胜感激任何帮助解决这方面的细节。谢谢!