【问题标题】:ActiveRecord::NotNullViolation: PG::NotNullViolation: ERROR: null value in column "created_at" violates not-null constraintActiveRecord::NotNullViolation: PG::NotNullViolation: 错误: "created_at" 列中的空值违反非空约束
【发布时间】:2020-10-20 11:43:03
【问题描述】:

我有一个新模型,这是我的迁移:

def change
    create_table :news do |t|
      t.string :title
      t.text :content

      t.timestamps
    end
  end

这是我的架构

  create_table "news", force: :cascade do |t|
    t.string "title"
    t.text "content"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
  end

我也有这个模型的策略(来自权威人士)和一个 new_policy_test,但是,目前两者都是空的。

所以当通过 Travis 的测试时,它告诉我:

NewPolicyTest#test_update:
ActiveRecord::NotNullViolation: PG::NotNullViolation: ERROR:  null value in column "created_at" violates not-null constraint
DETAIL:  Failing row contains (1, MyString, MyText, null, null).

同样适用于 NewPolicyTest#test_update、NewPolicyTest#test_scope、NewPolicyTest#test_show、NewPolicyTest#test_destroy、NewPolicyTest#test_create。

我应该怎么做才能让 Travis 不给我这个错误?

【问题讨论】:

  • 不清楚你的问题是什么。当不可空列中的列值为空时,您会得到 NotNullViolation - 这是预期的行为。
  • 我的问题是我应该怎么做才能不得到ActiveRecord::NotNullViolation: PG::NotNullViolation: ERROR:
  • 编辑您的帖子以说明这一点。
  • 你是从哪一行代码得到这个错误的,你也可以分享一下
  • 我已经通过编辑我的 news.yml 文件中的装置解决了这个问题

标签: ruby-on-rails ruby travis-ci pundit


【解决方案1】:

我在 news.yml 文件中添加了 created_at 和 updated_at 装置。

one:
  title: MyString
  content: MyText
  created_at: <%= 5.day.ago.to_s(:db) %>
  updated_at: <%= 5.day.ago.to_s(:db) %>

【讨论】:

    【解决方案2】:

    你应该有

    t.timestamps

    在您的迁移中而不是

    t.datetime "created_at",精度:6,null:false t.datetime "updated_at", 精度: 6, null: false

    它会在创建或更新记录时自动填充字段。

    【讨论】:

    • 在我的迁移中,我有 t.timestamps,我拥有的代码 sn-p 来自我的架构
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2021-04-09
    • 2012-11-02
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    相关资源
    最近更新 更多