Rails 5迁移 - 缺少参考

时间:2017-10-14 16:49:12

标签: ruby-on-rails activerecord

我不确定我缺少什么 - 我最近将我的Product类别从静态枚举变成了一个表格,所以我需要修改参考。

我将结合构建Tasks表的众多迁移,我需要引用Product

class CreateTasks < ActiveRecord::Migration[5.1]
  def change
    create_table :tasks do |t|
      t.string :task_name
      t.text :comment
      t.datetime :task_start_date
      t.datetime :task_end_date
      t.references :project

      t.timestamps
    end
  end
end

class AddDocumentsToTasks < ActiveRecord::Migration[5.1]
  def change
    add_reference :tasks, :document, foreign_key: true
    add_reference :tasks, :product, foreign_key: true
  end
end


class AddClientIdToTasks < ActiveRecord::Migration[5.1]
  def change
    add_foreign_key :tasks, :client, foreign_key: true
  end
end

现在换新模式(简化)

 create_table "products", force: :cascade do |t|
    t.string "product_name"
    t.text "product_description"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "client_id"
  end

  create_table "tasks", force: :cascade do |t|
    t.string "task_name"
    t.text "comment"
    t.datetime "task_start_date"
    t.datetime "task_end_date"
    t.bigint "project_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "product"
    t.bigint "document_id"
    t.boolean "completed"
    t.integer "client_id"
    t.index ["document_id"], name: "index_tasks_on_document_id"
    t.index ["project_id"], name: "index_tasks_on_project_id"
  end

我实际上不知道任务文件夹中来自t.integer "product"的地方。我看了一遍。

由于以下警告,它目前正在打破所有集成/播种: ActiveRecord::AssociationTypeMismatch: Product(#69974683871240) expected, got 1 which is an instance of Integer(#13017840)

我认为这是非常简单的我缺少但是因为它是非常冗余的代码我不太清楚为什么它适用于文档/项目,而不是产品。

以防万一: 产品迁移

class CreateProducts < ActiveRecord::Migration[5.1]
  def change
    create_table :products do |t|
      t.string :product_name
      t.text :product_description
      t.references :client
      t.references :task

      t.timestamps
    end
  end

端**

更新

在我完全明白为什么之前没有回答这个问题,但似乎我误解了rails db:reset做了什么。一旦我逐步删除/创建/迁移/种子,就会启动整个数据库结构并启动新模式。

似乎db:reset只使用我的Schema.rb文件中的逻辑

1 个答案:

答案 0 :(得分:0)

您的schema.rb用作迁移的缓存。因此,如果您更改已迁移的迁移文件,则不会显示修改。您必须删除schema.rb内容,然后重置数据库。