ruby ActiveRecord::NotNullViolation:PG::NotNullViolation:错误:列“created_at”中的空值违反了非空约束

zysjyyx4  于 2023-08-04  发布在  Ruby
关注(0)|答案(3)|浏览(114)

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

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


我也有一个这个模型的策略(来自pundit)和一个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不给予我这个错误?

qc6wkl3g

qc6wkl3g1#

我在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) %>

字符串

mwyxok5s

mwyxok5s2#

你应该这么做
t.timestamps
在您的迁移中,而不是
t.datetime“created_at”,精度:6,null:false t.datetime“updated_at”,precision:6,null:false
然后,当创建或更新记录时,它将自动填充字段。

hfsqlsce

hfsqlsce3#

发生这种情况的一个原因是当模型名称是复数时,如问题中所示(表news的模型News)。
解决方案是使用以下命令更新config/initializers/inflections.rb

ActiveSupport::Inflector.inflections do |inflect|
  inflect.uncountable "news"
end

字符串

相关问题