FactoryGirl使用零或零而不是字符串填充类型列

时间:2016-02-25 22:25:35

标签: ruby-on-rails ruby rspec factory-bot

我有一个: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 /零值吗?

2 个答案:

答案 0 :(得分:3)

第一个评论者是对的,你不能轻易使用Rails中的type列,因为它用于单表继承(STI)。

如果您坚持使用type列,则需要禁用STI功能。

请参阅Rails -- use type column without STI?

答案 1 :(得分:1)

您是否尝试过指定子类?

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

我很确定这会奏效。