设置默认值时出现空约束错误 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】:null 和 default 在迁移中有不同的用途。如果你想把默认值设置为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 中的选项获取值时出现空指针异常