2013-05-26 2 views
0

는 전 부문 모델 및 득점 가능 모델을 가지고, 그들은 다음과 같이 연결되어 있습니다 :재귀 적 스택 오버플로 오류없이 RSpec 테스트를 수행하려면 어떻게해야합니까?

class Division < ActiveRecord::Base 
    has_one :scoring, :as => :scorable 

    validates :name, :presence => true 
    validates :scoring, :presence => true 
end 

class Scoring < ActiveRecord::Base 
    belongs_to :scorable, polymorphic: true 

    validates :scorable, :presence => true 
end 

가 어떻게 이러한 모델의 유효성을 테스트 할 수 있습니다 ? 이들 각각에 대한 팩토리가 서로에 대한 참조를 포함하면 스택 오버플로가 발생합니다. 나는 아래 공장을 만들 경우, 나는 득점 가능 공백 오류가 될 수 없습니다 취득 (분명히) 나는 테스트 할 때 :

FactoryGirl.define do 
    factory :division do 
    name "Division" 
    organisation 
    association :scoring, factory: :scoring 
end 

FactoryGirl.define do 
    factory :scoring do 
    first 12 
    second 10 
    third 8 
    scorable nil 
    end 
end 

가 어떻게 두 모델에서 협회의 존재를 테스트 할 수 있습니다?

답변

0

모델이 잘못되었습니다. Division 모델에 scoring의 존재를 확인하는 것은 불가능합니다.

Divisionhas_one입니다. 테이블에는 해당 필드가 없습니다. Scoring 모델의 테이블에만 scorable_idscorable_type이라는 추가 필드가 있습니다.

유효성 검사를 Division에서 삭제하면 모든 코드가 정상적으로 작동합니다.

+0

흠, 확인. 즉, 본부 (Division)가 항상 관련 득점을하고 있는지 확인하고 싶습니다. 이것을 시행하는 가장 좋은 방법은 무엇입니까? – kmc

+0

@ kmc, 아무 방법이 없습니다. 그것은 잘못된 db 스키마입니다. 여기에 DB 구조를 확인하십시오 : http://guides.rubyonrails.org/association_basics.html#the-has_one-association –

+0

내 DB를 구조화하는 더 좋은 방법이 있습니까? 여러 모델에 점수를 달 수 있기 때문에 (다형성) 그 중 일부는 선택 사항이지만 각 부문마다 전적으로 득점을 원합니다. 콜백에서 첨부 된 부분을 만들 수 있습니까? 아니면 실제로 DB 구조 자체에 문제가 있습니까? – kmc

관련 문제