我正在轨道上工作,当我尝试在数据库中创建一行时,它显示不为空异常失败

I am working on rails and when i try to create a row in database it shows not null exception failed

提问人:s-chuck 提问时间:7/21/2023 最后编辑:dbuggers-chuck 更新时间:7/22/2023 访问量:26

问:

class AddPlacesTable < ActiveRecord::Migration[7.0]
  def change
    create_table :places, id: :uuid do |t|
      t.string :name, null:false
      t.string :address, null:false
      t.string :city, null:false

      t.timestamps
    end
  end
end

这是我的数据库文件,以下是它抛出的错误。

SQLite3::ConstraintException: NOT NULL constraint failed: places.id (ActiveRecord::NotNullViolation)

我的模型文件是空的,它只有一个继承自 ApplicationRecord 的类。

当我开始在我的数据库中创建一行时,它显示 null 表示 places.id 但我认为 rails 应该自动为其分配一个值,因为它是一个主键。

Ruby-on-Rails Ruby 数据库 SQLite

评论

0赞 dbugger 7/21/2023
这回答了你的问题吗?sqlite 的 Rails 5 uuid 问题

答:

0赞 kwerle 7/22/2023 #1

它之所以爆炸,是因为你已经告诉 rails id 的类型是 uuid。

Rails 不知道如何创建 uuid。对于一个 rails 应用来说,正常的事情是你不要指定 id 列的类型。它将为您创建,并且将是一个整数,并将自动填充。通过指定 uuid 类型,你已经告诉 rails 不要做正常的默认事情,所以它让你做你自己的事情。

如果没有它,重新创建表格,你就可以上路了。