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 并通过!
在我的 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 并通过!