移除导轨中的模型(与“ rails g model Title…”相反)


115
rails g model Rating user_id:integer message:string value:integer

如何完全删除此模型?谢谢


5
Mikhail在下面的最高答案适用于上一次迁移中创建的模型。那些想要删除已经存在了一段时间的模型及其表的人,此线程确切地描述了要做什么。
Ninjakannon

Answers:


192
bundle exec rake db:rollback    
rails destroy model <model_name>

生成模型时,它将创建数据库迁移。如果在该模型上运行“ destroy”,它将删除迁移文件,但不会删除数据库表。所以在跑步之前

bundle exec rake db:rollback

:(读第一行,并做到了这是我的错,但一个正确排序的答案可能有助于。
迈克牛逼

4
如果它是开发中的,并且您不怕丢失数据,则可以运行bundle exec rake db:drop db:create db:migrate。这将是一个新的空数据库。
Mikhail Nikalyukin

谢谢 我从“废纸the”恢复了迁移,但是事实证明我也缺少另一个迁移,因此我将按照您的建议进行操作
Mike T

6
@MikeT你呢?从垃圾桶中恢复了迁移?您不使用任何VCS?o_O您绝对应该!
普兰姆iam

为我工作,但我还必须进入route.rb并删除“ devise_for:MODEL”
cormacncheese

54

试试这个

rails destroy model Rating

它将删除模型,迁移,测试和固定装置


5
它会删除所有内容,但不会创建降级迁移之类的内容。
Mr.The

28

对于将来的提问者:如果您无法从控制台删除表,请尝试创建一个迁移来为您删除表。您应该创建一个迁移,然后在要删除的文件注释表中像这样:

class DropTables < ActiveRecord::Migration
  def up
    drop_table :table_you_dont_want
  end

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end

很好的答案,使用capistrano部署将表现出预期的效果。
LessQuesar

18
  1. 删除迁移(如果您已经迁移了迁移)

    rake db:migrate:down VERSION="20130417185845" #Your migration version
  2. 删除模型

    rails d model name  #name => Your model name

rails d model我正在寻找扭转我的想法的东西rails g model
Komsun K.

3

这是詹妮·朗(Jenny Lang)回答的另一种实现,适用于Rails 5。

首先创建迁移文件:

bundle exec be rails g migration DropEpisodes

然后按如下所示填充迁移文件:

class DropEpisodes < ActiveRecord::Migration[5.1]
  def change
    drop_table :episodes
  end
end

运行rails db:migrate将删除该表。如果运行rails db:rollback,Rails会抛出ActiveRecord::IrreversibleMigration错误。


这是一个有用的答案-但该命令对我不起作用。我用过:bundle exec rails生成迁移DropEpisodes,然后我也将在下面使用模型删除代码。
安德鲁·斯波德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.