そのため、いくつかのモデルをセットアップしていますが、それらは 2 つの抽象基本クラスに基づいています (または、以前はクラスでした)。Datamapper の STI の処理で多くの問題に遭遇した後、Lighthouse ページで未解決のバグのように見えたので、モデルを DRY に保つためにすべてのプロパティを定義するモジュールを作成することにしました。残念ながら、私はスコーピングの問題を抱えており、問題をさらに複雑にしているのは、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
私はここで途方に暮れています。これを解決する方法を知っている人はいますか?