2015-02-07 2 views
0

여기 내 시나리오가 있습니다 :팩토리 소녀가 단일 테이블 상속을 사용할 때 존재하지 않는 테이블에 액세스하려고 시도합니다.

데이터베이스에 여러 유형의 이벤트를 저장하고 싶습니다. 그들은 모두 같은 분야를 공유하지만 다르게 행동 할 것입니다. 따라서 Single Table Inheritance를 사용했습니다.

이벤트에 대한 테이블 정의는 다음과 같습니다

class AddEvents < ActiveRecord::Migration 
    def up 
    create_table :events do |t| 
     t.date :event_date 
     t.string :type 
     t.references :trackable , :polymorphic => true 
    end 
    end 

    def down 
    drop_table :events 
    end 
end 

내 이벤트 클래스는이 (최소 작업 예) 같이 :

class Event < ActiveRecord::Base 

    self.abstract_class = true 
    belongs_to :trackable, polymorphic: true 

    [... some validation ] 
end 

class View < Event; end 
class Click < Event; end 
class Conversion < Event; end 

테이블은 잘 생성됩니다. 그러나 나는 전화 할 때 : :view1

@view1 = FactoryGirl.build(:view1) 

다음과 같이 정의 :

factory :click1, class: Click do 
    event_date TEST_CLICK_1_EVENT_DATE 
end 

나는 다음과 같은 오류 메시지가 나타납니다

장애/오류 : 뷰 1 @를 = FactoryGirl.build (: view1) ActiveRecord :: StatementInvalid : Mysql2 :: 오류 : 'adserve_test.views'테이블이 존재하지 않습니다. '보기'에서 전체 필드보기

나도 같은 오류를주는 콘솔에서 클릭 개체를 만들려고했습니다. 어떤 아이디어가 이것을 고치는 방법?

+0

어때 이것에 대해 http://stackoverflow.com/questions/18332080/testing-simple-sti-with-factorygirl? – shoji

+0

@shoji FactoryGirl은 내가 생각하는 문제가 아니어야한다. 이후 콘솔을 통해 새로운 인스턴스를 만들려고했기 때문에 같은 오류가 발생했습니다. – Nessuno

답변

0

문제는 Event 상위 클래스에 self.abstract_class=true입니다. 레일스의 추상 클래스는 C#이나 Java와는 완전히 다른 것을 잊어 버렸습니다. 또는 공식 웹 사이트에서 알 수 있듯이 :

abstract_class
Set this to true if this is an abstract class (see abstract_class?). If you are using inheritance with ActiveRecord and don't want child classes to utilize the implied STI table name of the parent class, this will need to be true.

내가 원했던 것은 100 %가 아닙니다.