Ruby on rails db:migrate:未创建表,但是否创建了其他表?

Ruby on rails db:migrate:未创建表,但是否创建了其他表?,ruby-on-rails,ruby,sqlite,rubymine,Ruby On Rails,Ruby,Sqlite,Rubymine,我只是尝试在我的模式、事件和日历中添加两个新表。运行db:migrate时,它运行时没有出现错误,但仅拾取了事件表并将其放入可视化数据库中。为什么会这样?这和“有很多/属于”协会有关吗?非常令人沮丧 我刚刚运行了db:migrate:status,它显示: Status Migration ID Migration Name up 20151002160900 Create messages up 20151123214812 Create calendars up

我只是尝试在我的模式、事件和日历中添加两个新表。运行
db:migrate
时,它运行时没有出现错误,但仅拾取了
事件
表并将其放入可视化数据库中。为什么会这样?这和“有很多/属于”协会有关吗?非常令人沮丧

我刚刚运行了
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
class CreateCalendars
我曾尝试在just create_calendars上运行
db:migrate
,但它只是删除了所有内容,没有创建表

我试过运行
db:drop
db:setup

我已经查看了我的事件表文本,虽然它包含“calendar_id”,但这不是外键,因为没有日历表(我假设)


为什么会发生这种情况?

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

您可以很容易地发现您正在重新运行日历迁移

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

了解有关和的更多信息。

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

您可以很容易地发现您正在重新运行日历迁移

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

了解有关和的更多信息。

我假设名为
:end的列导致了该问题。您可以尝试更改为非保留的Ruby关键字并从头开始重试吗?这不是不会创建的表,但如何检查表是否已创建?运行
db:drop
db:migrate
后会发生什么?还可以尝试运行
rake db:migrate:down VERSION=20151123214812
rake db:migrate:up VERSION=20151123214812
。注意控制台中的输出,它应该打印一些东西。一个帮助您避免使用诸如
end
begin
之类的Ruby关键字的好做法是在
\u处
处开始和
处结束时对日期和时间列进行后缀。您会注意到ActiveRecord对默认时间戳执行此操作。它读起来像英语:
event.starts\u在
我刚试过,它似乎起作用了!谢谢大家,我还更改了我的:start和:end to start\u at和ends\u atI假定名为
:end的列会导致此问题。您可以尝试更改为非保留的Ruby关键字并从头开始重试吗?这不是不会创建的表,但如何检查表是否已创建?运行
db:drop
db:migrate
后会发生什么?还可以尝试运行
rake db:migrate:down VERSION=20151123214812
rake db:migrate:up VERSION=20151123214812
。注意控制台中的输出,它应该打印一些东西。一个帮助您避免使用诸如
end
begin
之类的Ruby关键字的好做法是在
\u处
处开始和
处结束时对日期和时间列进行后缀。您会注意到ActiveRecord对默认时间戳执行此操作。它读起来像英语:
event.starts\u在
我刚试过,它似乎起作用了!谢谢大家,我也改变了我的:开始和:结束到开始和结束所以我该如何去修复它呢?那么我该如何去修复它呢?