我有一个模型List
。
我在终端输入了rails d model list
,结果是:
invoke active_record
remove db/migrate/20140116161958_create__lists.rb
remove app/models/list.rb
invoke rspec
remove spec/models/list_spec.rb
然后我输入rails g model list name:string size:integer
给了我这个:
invoke active_record
create db/migrate/20140213155321_create_lists.rb
create app/models/list.rb
invoke rspec
create spec/models/list_spec.rb
现在,正在运行rake db:migrate
给了我这个:
== CreateLists: migrating ===============================================
-- create_table(:lists)
rake aborted!
An error has occurred, this and all later migrations canceled:
PG::DuplicateTable: ERROR: relation "lists" already exists
问题是我的表格没有从我的数据库中删除。我无法回滚创建该表的迁移,因为它在我运行rails d model list
时被销毁。
我可以创建一个新的迁移并删除表,但是当我运行rails g model list...
时,它会在我创建迁移后放置,所以我认为它也会出错。
我唯一的选择是再次删除模型,创建迁移以删除表,然后重新创建模型吗?
此外,将来如何删除和重新创建模型呢?在rails d model
之前回滚迁移?
答案 0 :(得分:4)
<强> 1&GT; 强>
在运行rails d model list
运行
$ rake db:migrate:down VERSION=20140116161958
将回滚列表文件以从数据库中删除表列表。
<强> 2 - ; 强>
但是因为你已经破坏了你的模型,你可以做的是从rails数据库控制台删除表列表。试试这个
$ rails dbconsole # from your app root path
然后输入drop table lists;
第3&GT; 强>
您也可以从rails控制台中删除表格
$rails console
然后输入:
ActiveRecord::Migration.drop_table(:lists)
<强> 4&GT; 强>
你也可以创建一个迁移文件来删除你的表:
$ rails generate migration DropListsTable
这将创建一个空的迁移文件,现在编辑该文件看起来像:
class DropListsTable < ActiveRecord::Migration
def up
drop_table :lists
end
def down
raise ActiveRecord::IrreversibleMigration
end
end
然后运行$ rake db:migrate