我只是尝试在我的架构,事件和日历中添加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:drop
和db:setup
。
我查看了我的事件表格文本,虽然它包含&#39; calendar_id&#39;,但这不是外键,因为没有日历表(我假设)。
为什么会这样?
答案 0 :(得分:0)
如果迁移过去运行但之后已更改,则会遇到此问题。 Rails仅通过时间戳存储迁移的状态。它不会跟踪迁移文件中的更改。
您可以轻松找到重新运行日历迁移
$ bin/rake db:migrate:down VERSION=20151123214812
$ bin/rake db:migrate:up VERSION=20151123214812