删除 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...”相反)的主要内容,如果未能解决你的问题,请参考以下文章