Rails 迁移架构问题

Rails migration schema issue

在我的 rails 应用程序中,我的数据库中有三个 models/tables(用户、注册运行ts、事件)。当我 运行 遇到一个问题,说它找不到事件 table.

时,我正在设置一些 Capybara/RSpec 测试

现在事件模型运行良好,我已经能够创建事件,进入 rails 控制台并查询诸如 Events.all 或 Events.find(1 ).令我困惑的是我的模式。我的架构有

create_table "registrations", force: true do |t|
    t.string   "first_name"
    ...
end

create_table "users", force: true do |t|
    t.string   "email",                  default: "",    null: false
    ...
end

但没有提及事件 table。我为事件生成模型已经有一段时间了,但这里是迁移:

class CreateEvents < ActiveRecord::Migration
  def change
    create_table(:events) do |t|
      t.string :name
      t.string :location

      t.timestamps
    end
  end
end

我有 运行 命令,例如 rake db:reset 和 rake db:migrate 以确保我的所有迁移都是最新的。知道为什么事件 table 不在架构中吗?

更新: 所以我删除了 DB 和 Schema,并开始一次一个地迁移每个迁移。当我 运行 创建它的迁移时,事件 table 就在那里,但是在我 运行 以下命令之后 table 从架构中消失:

class AddingAssociationsToEventsUserModels < ActiveRecord::Migration
  def change
    add_column :events, :belongs_to, :user, index: true
  end
end

这是迁移 运行:

rake db:migrate:redo VERSION=20150518132834
== 20150518132834 AddingAssociationsToEventsUserModels: migrating =============
-- add_column(:events, :belongs_to, :user, {:index=>true})
   -> 0.0006s
== 20150518132834 AddingAssociationsToEventsUserModels: migrated (0.0006s) ====

那是因为test数据库和development数据库不匹配。

运行:

RAILS_ENV=test rake db:drop && rake db:create && rake db:migrate

RAILS_ENV=test rake db:test:prepare

RAILS_ENV=test rake db:reset

以上任何一个都应该有效。

好的,问题出在我的迁移文件中。这是我将迁移更改为:

class AddingAssociationsToEventsUserModels < ActiveRecord::Migration
  def change
    add_reference :events, :user, index: true
  end
end

现在事件 table 在我的架构中,测试可以找到 table 并通过!