Minitest会抛出ActiveRecord::NotNullViolation
以下错误
ActiveRecord::NotNullViolation: PG::NotNullViolation: ERROR: null value in column "user_id" of relation "promotion_covers" violates not-null constraint
在迁移和数据库指示的情况下,显得有些蹊跷:
create_table :promotion_covers do |t|
[...]
t.references :user, null: true, foreign_key: true
并 /d+ promotion_covers显示:
Column | Type | Collation | Nullable | Default | Storage | Compression |
-------------+------------------+----------+---------+---------+-------------+
user_id | bigint | | not null | | plain | |
以及类
class PromotionCover < ApplicationRecord
belongs_to :user, optional: true
user_id 列在迁移文件中从 null: false 改动,并在PostgreSQL中进行了手动编辑。
PG::NotNullViolation可能来自哪里?
解决方案
我的结论是,尽管Minitest会对fixture数据进行完整重新加载,但它仍然依赖于 schema.rb 文件。
因此:
- 数据导出(开发环境)
- bin/rails db:drop + db:create + db:migrate
- 数据加载(开发环境)
是为了获得符合预期的验证所必需的。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。