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

Ruby on rails FactoryGirl使用零或零而不是字符串填充类型列,ruby-on-rails,ruby,rspec,factory-bot,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 我在规范错误中得到了以下信息: …类型:无。。。类型不包括在列表中 这是我的测试: it '

我有一个
:topics
表,其中有一个
type
列用于单表继承。我的有效主题类型之一应该是字符串“Announcement”。当我在topic.rb中的验证为:

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似乎喜欢类名声明而不是字符串“Announcement”,因为其他测试都是这样通过的。但当我切换到字符串进行良好测量时:

factory :topic
  group
  membership
  type "Announcement"
end
我得到同样的错误,除了

type:0
而不是
type:nil


我应该使用字符串还是类名?知道我的工厂为什么会得到0/nil值吗?

第一个注释是正确的,您不能轻易地在Rails中使用
type
列,因为它用于单表继承(STI)

如果坚持使用类型列,则需要禁用STI功能


请参见

第一个注释是正确的,您不能轻易地在Rails中使用
类型
列,因为它用于单表继承(STI)

如果坚持使用类型列,则需要禁用STI功能


请参见

您是否尝试指定子类

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

我很确定这会起作用。

您是否尝试过指定子类

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

我很确定这会起作用。

我很确定
type
不能用作表中的列名。至少在没有某种干预的情况下是这样。我很确定
type
不能用作表中的列名。至少在没有某种干预的情况下,我想用它来缝合当你不需要验证你的类型列时,它将从类名中自动填写。我想用它来缝合当你不需要验证你的类型列时,它将从类名中自动填写。