【问题标题】:rails foreign key violation error key not present in tablerails外键违规错误键不存在于表中
【发布时间】:2015-06-16 21:47:32
【问题描述】:

我有两个模型划分定义和模型定义

部门定义:

    has_many :model_definitions, inverse_of: :division_definition, foreign_key: :division_definition_id, primary_key: :division_definition_id

模型定义:

   belongs_to :division_definition, inverse_of: :model_definitions, foreign_key: :division_id,  primary_key: :division_id

在Db结构中

   def change
    create_table :model_definitions do |t|
      t.string :model_id , null: false, unique: true
      t.string :car_model_name , null: false
      t.belongs_to :division_definition , null: false

      t.timestamps null: false
    end
    add_index :model_definitions, :division_definition_id
    add_foreign_key :model_definitions, :division_definitions,      on_delete: :restrict
   end

分区定义表

    def change
      create_table :division_definitions do |t|
        t.integer :division_definition_id, null: false
        t.string :division_name,null: false

        t.timestamps null: false
      end
      add_index :division_definitions, :division_definition_id,   unique: true
    end

当我尝试通过控制台中的除法定义创建模型定义时,出现以下错误

   PG::ForeignKeyViolation: ERROR:  insert or update on table "model_definitions" violates foreign key constraint "fk_rails_addc8b742e"
   DETAIL:  Key (division_definition_id)=(124) is not present in table "division_definitions".
   : INSERT INTO "model_definitions" ("model_id", "car_model_name", "division_definition_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"
   (0.3ms)  ROLLBACK
   ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR:  insert or update on table "model_definitions" violates foreign key constraint "fk_rails_addc8b742e"
   DETAIL:  Key (division_definition_id)=(124) is not present in table "division_definitions".
   : INSERT INTO "model_definitions" ("model_id", "car_model_name", "division_definition_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"
   from /home/love/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/postgresql_adapter.rb:602:in `exec_prepared'

这是我试过的,

   DivisionDefinition.create(division_definition_id: '124', division_name: 'BMW')
   a = DivisionDefinition.last.model_definitions.build(model_id: 'bmw1', car_model_name: 'bmw1')
   a = DivisionDefinition.last.model_definitions.build(model_id: 'bmw1', car_model_name: 'bmw1')
   a.save

如果我从 db 中删除 add_foreign_key,我可以通过 Divisiondefinition 创建模型定义

我在迁移文件中犯了什么错误?

【问题讨论】:

  • 能否请您也发布您的部门定义迁移文件?
  • 是的,您的迁移似乎有问题
  • @sonalkr132 : 分区定义表在帖子中更新
  • Remove null: false for belongs_to 这应该可以。试试看。
  • 为什么还要使用这个t.integer :division_definition_id, null: false? id 是自动创建的。

标签: ruby-on-rails ruby postgresql migration


【解决方案1】:

您的 ModelDefinitions 类引用 :division_id,它不会出现在您的代码中的其他任何地方。

【讨论】:

    猜你喜欢
    • 2018-11-12
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2018-06-14
    • 2015-11-02
    • 1970-01-01
    相关资源
    最近更新 更多