在我的数据库中,我有一个具有如下所示架构的表
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:错误:null “ is_deleted”列中的值违反了非空约束
现在,当我设置其默认值时,不会出现此错误。你能告诉我我在做什么错。谢谢
这是要插入的JSON
{
"data":
[
{
"external_id":"2262a0228sf-1b9e-sd4e76-b5d7-a8ba01783ebb9i3413139",
"permalink": '234242341',
"hide": true,
"company_name": "com1",
}
]
}
答案 0 :(得分:2)
空 和 默认 在迁移中具有不同的用途。如果要将默认值设置为false,则在控制器中未设置任何值时,只需使用
默认:false ,
在您的情况下,无需使用 null:false 参数。 默认将为您完成这项工作。有关null和default的更多说明,请检查以下链接How do :default => 0 and :null => false differ for integer fields in migrations?
答案 1 :(得分:0)
也许模型中有一个验证,如:validates :is_deleted, presence: true?
:
保留验证并默认设置为false(如果缺少),即
def default_deleted_status
self.status ||= false
end