加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – rails列不能为null:

发布时间:2020-12-17 01:58:06 所属栏目:百科 来源:网络整理
导读:我注意到我的应用程序自动将我的所有进程设置为在创建后立即完成.我仔细研究过,找不到为什么日期没有被告知更新,但我发现我的一个观点是寻找一个不存在的字段.我创建了“完整”字段,将其设置为非null布尔值并再次尝试. 我正在将它自动设置为true,所以我尝试
我注意到我的应用程序自动将我的所有进程设置为在创建后立即完成.我仔细研究过,找不到为什么日期没有被告知更新,但我发现我的一个观点是寻找一个不存在的字段.我创建了“完整”字段,将其设置为非null布尔值并再次尝试.

我正在将它自动设置为true,所以我尝试在create方法中将其设置为false,这仍然不起作用:S所以我尝试将隐藏字段放入表单中.即使提供了值,我现在收到“列不能为空”错误.

如您所见,显然有一个完整值的参数.我错过了什么?

错误:

Mysql::Error: Column 'complete' cannot be null: INSERT INTO `decommissions` (`completed_at`,`keep_backups`,`services_stopped`,`updated_at`,`operating_system_id`,`comments`,`username`,`disposition`,`stakeholder_email`,`complete`,`alias`,`storage`,`model_id`,`contract_maintenance`,`created_at`) VALUES(NULL,1,'2010-10-18 00:32:37',NULL,'','test@qut.edu.au','test1','2010-10-18 00:32:37')

参数:

{"decommission"=>{"dns_items_attributes"=>{"0"=>{"ip"=>"131.181.185.111","alias"=>"test","retain"=>"1","_destroy"=>""}},"keep_backups"=>"1","services_stopped"=>"1","operating_system_id"=>"1","stakeholder_email"=>"test@qut.edu.au","alias"=>"test1","model_id"=>"1"},"commit"=>"Submit","authenticity_token"=>"cMMf0zS/5jPExlXqVPaYVXndqPeVkm+OQ/WEPIYd2+g=","disposition"=>"Dispose","complete"=>"false","storage"=>"Local","contract_maintenance"=>"0"}

当我在创建控制器中放入以下内容时,它呈现’true’:

@decommission = Decommission.new(params[:decommission])
@decommission.complete = false
render :text => @decommission.complete

解决方法

您可能强制执行数据库约束,该列不能通过迁移中的某些内容包含NULL值,如:

add_column:decommissions,:complete,:boolean,:null =>假

您可能还希望列的默认值为false而不是NULL

就个人而言,我习惯于每当我添加一个布尔列时总是设置:default => false(或true),这有助于避免在范围等中检查true或false的逻辑错误,如果没有正确设置,则忘记该值有时可以为null.

您可以通过mysql提示确认这是问题:

mysql> show indexes from decommissions;

应该有一个Non_unique设置为0且Column_name为complete的索引.

要解决此问题,您可以添加迁移执行:

change_column_default(:decommissions,:complete,false)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读