在导轨中移除模型(与"导轨g模型标题..."相反)

Col*_*ern 110 ruby migration model ruby-on-rails

rails g model Rating user_id:integer message:string value:integer
Run Code Online (Sandbox Code Playgroud)

我怎样才能完全删除这个模型?谢谢

Mik*_*kin 185

bundle exec rake db:rollback    
rails destroy model <model_name>
Run Code Online (Sandbox Code Playgroud)

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

bundle exec rake db:rollback
Run Code Online (Sandbox Code Playgroud)

  • @MikeT你什么?从垃圾桶恢复迁移?你不使用任何VCS?o_O你绝对应该! (6认同)
  • 如果它是开发的并且您不害怕丢失数据,您可以运行`bundle exec rake db:drop db:create db:migrate`.它将是一个新的空数据库. (4认同)

fl0*_*00r 49

试试这个

rails destroy model Rating
Run Code Online (Sandbox Code Playgroud)

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

  • 它会删除所有内容,但不会创建降级迁移或其他内容. (4认同)

小智 28

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

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

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end
Run Code Online (Sandbox Code Playgroud)


小智 17

  1. 删除迁移(如果已迁移迁移)

    rake db:migrate:down VERSION="20130417185845" #Your migration version
    
    Run Code Online (Sandbox Code Playgroud)
  2. 删除模型

    rails d model name  #name => Your model name
    
    Run Code Online (Sandbox Code Playgroud)


Pow*_*ers 5

这是 Jenny Lang 答案的不同实现,适用于 Rails 5。

首先创建迁移文件:

bundle exec be rails g migration DropEpisodes
Run Code Online (Sandbox Code Playgroud)

然后按如下方式填充迁移文件:

class DropEpisodes < ActiveRecord::Migration[5.1]
  def change
    drop_table :episodes
  end
end
Run Code Online (Sandbox Code Playgroud)

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