设置默认值时出现空约束错误 Ruby On Rails - Postgresql

Posted

技术标签:

【中文标题】设置默认值时出现空约束错误 Ruby On Rails - Postgresql【英文标题】:Null constraint error while Default value is set Ruby On Rails - Postgresql 【发布时间】:2018-07-14 12:51:24 【问题描述】:

在我的数据库中,我有一个具有如下架构的表

  create_table "external_source", force: :cascade do |t|
    t.string   "external_id"
    t.string   "permalink",                             null: false
    t.datetime "created_at",                            null: false
    t.datetime "updated_at",                            null: false
    t.boolean  "is_deleted",         default: false,    null: false
    t.string   "company_name",       default: ""
    t.boolean  "hide_salary",        default: true,     null: false
  end

但是当我尝试插入没有is_deleted 参数的值时,Rails 服务器会抛出空约束违规错误,例如:

ActiveRecord::StatementInvalid (PG::NotNullViolation: ERROR: null “is_deleted”列中的值违反了非空约束

现在,当我设置了它的默认值时,我并不期待这个错误。你能告诉我我做错了什么吗?谢谢你

这是要插入的 JSON


  "data":
  [
    
      "external_id":"2262a0228sf-1b9e-sd4e76-b5d7-a8ba01783ebb9i3413139",
      "permalink": '234242341',
      "hide": true,
      "company_name": "com1",
    
  ]

【问题讨论】:

请贴出创建语句的代码。 @Anton 我用 json 更新了 太棒了!请同时添加控制器代码。 【参考方案1】:

nulldefault 在迁移中有不同的用途。如果你想把默认值设置为false,当控制器中没有设置值时,直接使用,

默认:假

在您的情况下,无需使用 null:false 参数。 default 会为您完成这项工作。有关 null 和 default 的更多说明,请查看以下链接How do :default => 0 and :null => false differ for integer fields in migrations?

【讨论】:

我在做这件事之前没有用,所以我添加了null: false,它也没有用 能否请您添加用于创建的控制器代码。 ExternalSource.new 在 Rails 控制台中显示什么? 抱歉回复晚了。互联网真的很糟糕。是的,它显示了默认值。我检查。 那么控制器代码有问题。从迁移文件中删除 null: false 并检查控制器中的代码。【参考方案2】:

也许模型中有验证,比如validates :is_deleted, presence: true?,如果是这样的话:

去掉这个验证,或者

保持验证并默认设置为false(如果缺少),即

def default_deleted_status
  self.status ||= false
end

【讨论】:

以上是关于设置默认值时出现空约束错误 Ruby On Rails - Postgresql的主要内容,如果未能解决你的问题,请参考以下文章

尝试从 Apache Beam 中的选项获取值时出现空指针异常

PHP exec |尝试设置DBUS_SESSION_BUS_ADDRESS时出现空字节错误

接收 Json 字符串时出现空数组问题

导航回另一帧时出现空对象引用错误

将折线与本机地图一起使用时出现空引用错误

在颤振中调用 PhotoURL 时出现空错误 [重复]