db:migrate:没有创建表,但其他表是?

时间:2015-12-14 08:44:49

标签: ruby-on-rails ruby sqlite rubymine

我只是尝试在我的架构,事件和日历中添加2个新表。运行db:migrate时,它运行时没有错误,但只有events表被拾取并放入可视数据库。为什么会这样?它与has_many / belongs_to关联有关吗?很沮丧!

我刚刚运行db:migrate:status并显示:

Status Migration ID   Migration Name
up     20151002160900 Create messages
up     20151123214812 Create calendars
up     20151123220903 Create customers
up     20151123221638 Create businesses
up     20151213150347 Create events

因此它据称正在制作日历,但它没有出现在我的数据库中。有谁知道如何解决这个问题?

这是我的数据库架构:

ActiveRecord::Schema.define(version: 20151213150347) do
  create_table "businesses", force: true do |t|
    t.string "name"
    t.string "email"
    t.string "normal_password_digest"
    t.string "manager_password_digest"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "customers", force: true do |t|
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer "business_id"
    t.string "first_name"
    t.string "last_name"
    t.string "email"
    t.string "password_digest"
    t.string "remember_digest"
    t.string "role"
  end

  create_table "events", force: true do |t|
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer "calendar_id"
    t.text "name"
    t.datetime "start"
    t.datetime "end"
    t.string "location"
  end

  create_table "messages", force: true do |t|
    t.text "content"
    t.datetime "created_at"
    t.datetime "updated_at"
  end
end

这些是我的2个迁移文件:

class CreateCalendars < ActiveRecord::Migration  
  def change 
    create_table :calendars do |t|
      t.timestamps
      t.references :customer, foreign_key: true
      t.string :name
      t.string :googlePass
      t.string :googleID
    end
  end
end 

class CreateEvents < ActiveRecord::Migration 
  def change 
    create_table :events do |t|
      t.timestamps
      t.references :calendar, foreign_key: true
      t.text :name
      t.datetime :start
      t.datetime :end
      t.string :location
    end
  end
end

我尝试在create_calendars上运行db:migrate,它只删除了所有内容,但没有创建表格。

我尝试过db:dropdb:setup

我查看了我的事件表格文本,虽然它包含&#39; calendar_id&#39;,但这不是外键,因为没有日历表(我假设)。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

如果迁移过去运行但之后已更改,则会遇到此问题。 Rails仅通过时间戳存储迁移的状态。它不会跟踪迁移文件中的更改。

您可以轻松找到重新运行日历迁移

$ bin/rake db:migrate:down VERSION=20151123214812
$ bin/rake db:migrate:up VERSION=20151123214812

详细了解resetting migrationsreverting migrations