播种失败:"field can't be blank" 但我正在播种一个值

Seeding fails: "field can't be blank" but I'm seeding with a value

我有 Article table 的必填字段:

t.string  :article_type, null: false

并且在模型中:

validates :article_type,  presence: true
enum article_type:        [ :type1, :type2, :type3, :type4, :type5 ]

我的种子中有:

books = Book.all
books.each do |book|
  title = Faker::Lorem.sentence(3)
  article_type = ["type1", "type2", "type3", "type4", "type5"].sample
  book.articles.create!( title: title,
                         article_type: article_type )
end

问题: create 行产生错误:ActiveRecord::RecordInvalid: Validation failed: Article type can't be blank。是什么原因造成的? (我可以确认 .sample 行有效并选择五种类型中的一种)

更新: 如果我将 article_type 从字符串更改为整数,它会起作用。我应该怎么办?因为它不是真正的整数,是不是...?

Rails enum 期望相应的数据库列是整数,但你的是一个字符串。

所以要么更改为整数,要么用值验证替换枚举。

尝试找出错误。看看这颗没有问题的种子能不能继续分割?

article_type = "type1"
book.articles.create!( title: title,
                         article_type: article_type )