所以我正在建立一些模型,它们基于 2 个抽象基类(或者更确切地说它们曾经是类)。在 Datamapper 为我的用例处理 STI 遇到了很多麻烦之后,这似乎是他们灯塔页面上的一个开放错误,我决定改为使用模块来定义所有属性以保持我的模型干燥。不幸的是,我遇到了范围界定问题,更糟糕的是,我必须使用 2 级继承。这是我的代码:
module Part
def self.included(receiver)
receiver.class_eval do
include DataMapper::Resource
property :id, Serial
#other junk
end
end
end
module HardDrive
def self.included(receiver)
receiver.class_eval do
include Part
property :kind, Enum[:magnetic, :flash]
#buncha crap here
end
end
end
class Fujitsu
include HardDrive
property :rev, String
end
我得到的错误是:
uninitialized constant HardDrive::Enum (NameError)
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:80:in `const_missing'
from ./app/models/hard_drive.rb:6:in `included'
from ./app/models/hard_drive.rb:4:in `class_eval'
from ./app/models/hard_drive.rb:4:in `included'
from ./app/models/hard_drives/fujitsu.rb:2:in `include'
from ./app/models/hard_drives/fujitsu.rb:2
我在这里不知所措。任何人都知道我可以如何解决这个问题,或者更好,我可以用更聪明的方式来解决这个问题吗?