我有一个:topics
表,其中type
列用于单表继承。我的一个有效主题类型应该是字符串" Announcement"。当我在 topic.rb 中进行验证时,我无法弄清楚如何构建有效工厂:
validates_inclusion_of :type, in: ["Announcement"]
当我的工厂就是这个......
factory :topic
group
membership
type Announcement
end
我在规范错误中得到了这个:
... type:nil ...类型未包含在列表中
这是我的测试:
it 'should build a valid factory' do
topic = FactoryGirl.build(:topic)
expect(topic).to be_valid
end
FactoryGirl似乎喜欢类名称Announcement而不是字符串" Announcement",因为其他测试通过了这种方式。但是,当我切换到字符串以获得良好的衡量标准时:
factory :topic
group
membership
type "Announcement"
end
我得到了同样的错误,除了
type: 0
代替type: nil
我应该使用字符串还是类名?知道为什么我的工厂得到0 /零值吗?
答案 0 :(得分:3)
第一个评论者是对的,你不能轻易使用Rails中的type
列,因为它用于单表继承(STI)。
如果您坚持使用type列,则需要禁用STI功能。
答案 1 :(得分:1)
您是否尝试过指定子类?
factory :topic, :class => Announcement do
group
membership
end
我很确定这会奏效。