rails表中没有出现外键冲突错误键

时间:2015-04-11 03:49:25

标签: ruby-on-rails ruby postgresql migration

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

部门定义:

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

ModelDefinition:

   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

divisiondefinition表

    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创建模型定义

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

1 个答案:

答案 0 :(得分:0)

您的ModelDefinitions类引用:division_id,它出现在您的代码中的其他任何位置。