我在使用PostgreSQL和Rails时遇到了以下错误:
我猜它的意思是我正在尝试将
我还了解到它在说
而
我很高兴继续自己调试我的应用程序,但如果有人能为我解析这个错误消息,那就是一个很好的开端。(特别是由于堆栈跟踪并没有清楚地表明错误是在哪里产生的。)
ActiveRecord::StatementInvalid:
PG::NotNullViolation: ERROR: null value in column "created_at" violates not-null constraint
DETAIL: Failing row contains (4, null, null, 2014-05-08 13:27:56.002747, f, null, null, f, f).
: INSERT INTO "elements" ("updated_at") VALUES ('2014-05-08 13:27:56.002747') RETURNING "id"
我猜它的意思是我正在尝试将
2014-05-08 13:27:56.002747
的值插入到代表一个Element
实例的行的updated_at
列中。这样做应该没问题,因为这个值看起来对我来说是一个有效的日期/时间——正确吗?我还了解到它在说
created_at
不能为null
,但这似乎很荒谬,因为每个实例不是都会自动获得一个等于创建时间的created_at
值吗?而
RETURNING "id"
是什么意思呢?我很高兴继续自己调试我的应用程序,但如果有人能为我解析这个错误消息,那就是一个很好的开端。(特别是由于堆栈跟踪并没有清楚地表明错误是在哪里产生的。)
created_at
字段的约束为NOT NULL
和DEFAULT NULL
(正如您在@denis评论中所写),因此INSERT
操作失败,因为您试图创建一个created_at
列的NULL
值行。请问您能否提供生成此错误的Ruby代码? - mdesantiscreated_at
列指定default
值,所以Rails没有设置它,因此默认值在PostgreSQL列定义中被设置为NULL
。现在我在考虑,类似于t.datetime 'created_at',null: false,default: 'NOW()'
这样的代码可以解决这个问题。 - mdesantis