일부 모델을 설정 중이며 2 개의 기본 기본 클래스를 기반으로합니다 (또는 오히려 클래스였습니다). 등대 페이지에서 공개 된 버그 인 것으로 보이는 My use case에 대해 Datamapper가 STI를 처리하는 데 많은 어려움을 겪은 후에, 대신 모듈을 사용하여 내 모델을 DRY 상태로 유지하도록 모든 등록 정보를 정의하기로 결정했습니다. 불행하게도, 나는 범위 지정 문제를 가지고 있으며, 문제를 더욱 복잡하게 만드는 것은 2 단계의 상속을 사용해야한다는 것입니다.Modama를 사용하여 Datamapper로 등록 정보 정의
이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
여기 내 코드입니다. 누구든지이 문제를 어떻게 해결할 수 있었는지, 내가 이것을 할 수있는 더 똑똑한 방법을 알고 있습니까?
내가 측정기에 대한 부분 또는 하드 드라이브를 사용하려는 경우에만 것을, 그래서 나는 Part.all을하고 다음 뷰를 렌더링 할 수 그것을 기반으로하지만, 그렇게 큰 손실은 아닙니다. 상속을 사용해 보았지만 루비 상속을 사용할 수없고 서브 클래스에 대해 다른 테이블을 사용하게 할 수는 있습니다. 처음에는 STI로 이것을 디자인했지만, 등대 페이지에는 DM에 알려진 버그가 있습니다. 어떤 전략을 사용 하시겠습니까? – Technocrat