2017-02-14 1 views
0

일렬 :정의되지 않은 클래스/모듈 내가 같은 액티브 모델에 입력 객체의 배열을 저장하고

class Store::Bin < ActiveRecord::Base 
    serialize :items, Array 
end 

class Store::Item 
    include Virtus.model 
    attribute :name, String 
    ... 
end 

내가 development 모드에서 코드를 변경하고 브라우저를 새로 고침, 내가 undefined class/module Store::Item 예외를 얻을.

클래스 로딩과 무언가가 교차하고있는 것처럼 보입니다. 모든 파일은 app/models/store/... 디렉토리에 있으며 w/r이라는 이름으로 해당 Camelcase 이름이 지정됩니다.

레일 콘솔을 사용할 때도 같은 문제가 발생합니다. reload!는 콘솔에서 문제를 해결하지 않습니다. 대신 콘솔을 종료하고 다시 시작해야합니다.

답변

0

레일 자동로드 문제로 인해 클래스를 정의 할 때 :: 연산자를 사용하지 마십시오. 당신이 레일은 계층 구조를 해석하는 방법을 알아 내기 위해 Module.nesting를 사용 할 수 있습니다에 무슨 일이 일어나고 있는지 확실하지가되면 대신

module Store 
    class Item 
    # ... 
    end 
end 

을 시도합니다.

+0

불행하게도이 직렬화 된 클래스에 대한 요구가 표시되지 자동 로더에 관련이 있기 때문에 내 문제가 해결되지 않은 별도 모듈을 지정하여 필요한 의존성 선언 : 스토어 :: 항목 – vanboom

0

배열에 유형을 추가하면 문제가 해결 된 것 같지만 관련 FactoryGirl 팩토리에서 문제가 발생했습니다.

class Store::Bin < ActiveRecord::Base 
    serialize :items, Array[Store::Item] 
end 

UPDATE : 진짜 문제는 코드 변경/bin.rb를 저장하려고 할 때, 그 클래스는 자동으로로드되는하지만, 자동 로더 스토어 :: 항목 종속성 것을 몰랐다이었다.

실제 FIX : require_dependency

require_dependency "store/item" 
class Store::Bin < ActiveRecord::Base 
    serialize :items, Array 
end 
관련 문제