尝试重新创建Rails模型,迁移搞砸了

时间:2014-02-13 16:01:17

标签: ruby-on-rails model migration rake

我有一个模型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之前回滚迁移?

1 个答案:

答案 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