rake db:migrate不会创建表

时间:2016-10-19 03:52:14

标签: ruby-on-rails ruby sqlite rake

我正在使用Rails 4.2.6并且出现了奇怪的错误(使用HeadFirst书,项目和目录名称学习rails - “mebay”):

我需要创建仅使用“读取”CRUD的项目 - 所以我运行:

~/mebay $ rails generate model ad name:string description:text price:decimal seller_id:integer email:string img_url:string

Running via Spring preloader in process 8400
      invoke  active_record
   identical    db/migrate/20161018144410_create_ads.rb
   identical    app/models/ad.rb
      invoke    test_unit
   identical      test/models/ad_test.rb
   identical      test/fixtures/ads.yml

这是我的db / migrate / 20161018144410_create_ads.rb:

class CreateAds < ActiveRecord::Migration
  def change
    create_table :ads do |t|
      t.string :name
      t.text :description
      t.decimal :price
      t.integer :seller_id
      t.string :email
      t.string :img_url

      t.timestamps null: false
    end
  end
end

(基于之前的项目,对我来说相当不错)

然后,据我所知,我需要创建数据库(我使用sqlite):

~/mebay $ rake db:migrate

但在那之后,我的development.sqlite3仍然是空的

我做错了什么?

2 个答案:

答案 0 :(得分:1)

你实际上没有做错任何事。查看db / schema.rb,如果看到这个,那么您的数据库设置正确:

ActiveRecord::Schema.define(version: 20161019035406) do

  create_table "ads", force: :cascade do |t|
    t.string   "name"
    t.text     "description"
    t.decimal  "price"
    t.integer  "seller_id"
    t.string   "email"
    t.string   "img_url"
    t.datetime "created_at",  null: false
    t.datetime "updated_at",  null: false
  end

end

如果您收到表已存在的错误,则可以执行以下操作:

首先在您用于生成广告表的迁移文件中添加down方法。 down方法如下所示:

def down
  drop_table :ads
end

然后运行rake db:migrate:down VERSION=version_number,其中version_number是迁移文件名称中的时间戳。这将从数据库中删除该表。然后将change方法的名称更改为up。保存文件并运行rake db:migrate:up以再次创建表。

答案 1 :(得分:0)

如何先运行rake db:create然后再运行rake db:migrate