rake db:migrate 不创建 table
rake db:migrate does not create table
我正在使用 Rails 4.2.6 并出现奇怪的错误(使用 HeadFirst 书籍、项目和目录名称学习 rails - "mebay"):
我需要创建仅使用 "read" 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 仍然是空的
我做错了什么?
你其实并没有做错任何事。查看 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
如果您收到 table 已存在的错误消息,您可以执行以下操作:
首先将一个 down
方法添加到您用于生成广告 table 的迁移文件中。 down 方法如下所示:
def down
drop_table :ads
end
Then 运行 rake db:migrate:down VERSION=version_number
其中 version_number 是迁移文件名称中的时间戳。这将从数据库中删除 table。然后将 change
方法的名称更改为 up
。保存文件并 运行 rake db:migrate:up
再次创建 table。
先运行rake db:create
再运行rake db:migrate
怎么样
我正在使用 Rails 4.2.6 并出现奇怪的错误(使用 HeadFirst 书籍、项目和目录名称学习 rails - "mebay"):
我需要创建仅使用 "read" 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 仍然是空的
我做错了什么?
你其实并没有做错任何事。查看 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
如果您收到 table 已存在的错误消息,您可以执行以下操作:
首先将一个 down
方法添加到您用于生成广告 table 的迁移文件中。 down 方法如下所示:
def down
drop_table :ads
end
Then 运行 rake db:migrate:down VERSION=version_number
其中 version_number 是迁移文件名称中的时间戳。这将从数据库中删除 table。然后将 change
方法的名称更改为 up
。保存文件并 运行 rake db:migrate:up
再次创建 table。
先运行rake db:create
再运行rake db:migrate