删除rails中的模型(与“rails g model Title...”相反)

问题描述 投票:0回答:6
rails g model Rating user_id:integer message:string value:integer

怎样才能彻底删除这个模型呢?谢谢

ruby-on-rails ruby model migration
6个回答
214
投票

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

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

对于 5.0 及更高版本之前的 Rails 版本,请使用

rake
而不是
rails

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

65
投票

试试这个

rails destroy model Rating

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


33
投票

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

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

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end

24
投票
  1. 删除迁移(如果您已经迁移了迁移)

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

    rails d model name  #name => Your model name
    

5
投票

这是 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
错误。


0
投票

如果您对可逆迁移以删除表感兴趣

class DropProductsTable < ActiveRecord::Migration[7.0]
  def change
    drop_table :products do |t|
      t.string :name
      t.text :description
      t.decimal :price, precision: 8, scale: 2
      t.timestamps
 # Rest of the stuff like indexes. Consider copying directly from schema.rb
    end
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.