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

Posted

技术标签:

【中文标题】删除 rails 中的模型(与“rails g model Title...”相反)【英文标题】:Removing a model in rails (reverse of "rails g model Title...") 【发布时间】:2011-10-29 15:23:30 【问题描述】:
rails g model Rating user_id:integer message:string value:integer

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

【问题讨论】:

Mikhail 下面的最佳答案适用于上次迁移中创建的模型。那些想要删除已经存在了一段时间的模型及其表格的人,this thread 准确地描述了该怎么做。 【参考方案1】:

试试这个

rails destroy model Rating

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

【讨论】:

它删除所有,但它不会创建降级迁移或其他东西。【参考方案2】:

当您生成模型时,它会创建数据库迁移。如果您在该模型上运行“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>

【讨论】:

:( 阅读第一行并做到了。这是我的错,但正确排序的答案可能会有所帮助。 如果它是开发并且您不怕丢失您的数据,您可以运行bundle exec rake db:drop db:create db:migrate。这将是一个新的空数据库。 谢谢。我从垃圾箱恢复了迁移,但事实证明我还有另一个丢失的迁移,所以我会按照你的建议做 @MikeT 你什么?从垃圾箱中恢复迁移?你不使用任何VCS? o_O 你绝对应该! 为我工作,但我也不得不进入 routes.rb 并删除“devise_for :MODEL”【参考方案3】:

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

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

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end

【讨论】:

很好的答案,使用 capistrano 部署将按预期运行。【参考方案4】:

    移除迁移(如果您已经迁移了迁移)

    rake db:migrate:down VERSION="20130417185845" #Your migration version
    

    移除模型

    rails d model name  #name => Your model name
    

【讨论】:

rails d model 是我想要反转我的rails g model【参考方案5】:

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

首先创建迁移文件:

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 generate migration DropEpisodes 然后我也会用下面的模型删除代码。

以上是关于删除 rails 中的模型(与“rails g model Title...”相反)的主要内容,如果未能解决你的问题,请参考以下文章

如何在Rails 5中删除模型时删除模型的所有关联

将用户与 Rails 中的嵌套模型相关联

Rails自定义路由,如何删除?id =

如何让模型验证与 Rails 中的视图层对话以提供简单的功能?

在 Rails 3 中删除表和删除模型的最佳方法是啥?

Rails 尝试访问模型中的参数