我是否正确地说db / schema.rb文件应该从rake db:migrate上的db / migrate文件中提取?我正在运行rake db:migrate,它正在添加一个未在migrate中定义的表,也没有在模型中定义。有什么想法吗?
迁移文件(只有一个):
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :email
t.string :hashed_password
t.timestamps
end
end
end
rake后产生的架构:
ActiveRecord::Schema.define(:version => 20121113214159) do
create_table "user_categories", :force => true do |t|
t.string "title"
t.string "description"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "users", :force => true do |t|
t.string "email"
t.string "hashed_password"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
end
我之前添加了一个user_categories脚手架,但不正确所以我将其销毁。不知道我在哪里破坏了零件......
答案 0 :(得分:3)
如果您的数据库中没有任何重要数据,则可以运行rake db:drop
然后rake db:create
。然后运行rake db:migrate
,它应该更新您的架构干净。
答案 1 :(得分:2)
值得注意的是,rake db:migrate
将轮询数据库的当前状态(迁移的单独)并相应地更新schema.rb。例如,如果您进入SQL命令行并添加一个表,然后运行rake db:migrate
,schema.rb将反映该新表是否有迁移。
答案 2 :(得分:0)
可能是你忘了定义环境变量。
Gemfile
并确认您没有将sqlite
gem用于您的环境rake db:drop
然后rake db:drop
命令,如果输出您收到空字符串可能您忘记设置环境变量config/database.yml
文件,找到可以使用它们的位置。您应该找到类似的内容:database: <%= ENV["<DB_NAME"] %>
dotenv
或figaro
宝石,可能您忘记创建适当的文件或定义变量