2016-02-25 48 views
0

我有一個:topics表和一個type列用於單表繼承。我的有效主題類型之一應該是字符串「公告」。我無法弄清楚如何建立一個有效的工廠時,我在驗證topic.rb是:FactoryGirl使用零或零填充類型列,而不是字符串

validates_inclusion_of :type, in: ["Announcement"] 

當我廠是這...

factory :topic 
    group 
    membership 
    type Announcement 
end 

我得到這個我規格錯誤:

...類型:無...類型不包括在名單

這裏是我的測試:

it 'should build a valid factory' do 
    topic = FactoryGirl.build(:topic) 
    expect(topic).to be_valid 
end 

FactoryGirl似乎很喜歡的類名稱,而不是公佈的字符串「公告」,其他測試都通過這種方式。但是,當我切換到字符串的好措施:

factory :topic 
    group 
    membership 
    type "Announcement" 
end 

我得到了同樣的錯誤,除了

type: 0而不是type: nil

我應該使用字符串或類名?任何想法爲什麼我的工廠獲得0 /零值?

+1

我很確定'''type'''不能用作表的列名。至少不是沒有某種干預 – MilesStanfield

回答

3

第一個評論者是正確的,你不能輕易使用Rails中的type列,因爲它用於單表繼承(STI)。

如果您堅持使用類型列,那麼您將需要禁用STI功能。

Rails -- use type column without STI?

+0

我想將它用於STI – eeeeeean

+1

然後你不需要驗證你的類型列它會自動從類名填寫。 –

1

您是否嘗試過指定的子類?

factory :topic, :class => Announcement do 
    group 
    membership 
end 

我敢肯定,這將工作。