什么是Rails 3中删除表和删除模型中的最佳方式?(What is the best way to

2019-07-25 10:19发布

我有一个模型和我不再需要我的应用程序表,我可以离开他们那里,但我想将其删除,以保持整洁。

我试图找出与与我的迁移DB / schema.rb文件及任何副作用,它可能对我的生产环境乱搞删除它们的最好方式,我的应用程序是在Heroku。 我用我的两个本地机器和Heroku的PostgreSQL的。

到目前为止,我已经找到了两种方法可以做到这一点,但我不知道这是最好的方法/轨道的方式?

方法1

我想到了刚刚要在我的数据库和删除表&然后破坏模型。

rails db
DROP TABLE table_name
\q
rails destroy model model_name

如果我这样做会发生什么迁移我对这个模型/表? 我有两个迁移这个模型中,timestamp_create_modelname&A add_attribute_to_table名。

也将这种方法更新DB / schema.rb文件?

当我推到应用程序的Heroku我怀疑该模型将被删除,但该表将留在原地,有没有Heroku的命令删除表。

方法二

我读到的另一种方式是产生新的迁移删除表&然后销毁模型。

rails generate migration drop_tablename

&然后更新以下文件:

DB /迁移/ timestamp_drop_tablename(在性反应如下更新丹至极的答案)

class DropTablename < ActiveRecord::Migration
  def up
    drop_table :tablename
  end

  def down
    create_table :tablename do |t|
      t.string :table_column
      t.references :anothertable

      t.timestamps        
    end
    add_index :tablenames, :anothertable_id
  end
end

&然后在终端:

rake db:migrate
rails destroy model model_name
rake db:migrate
git add .
git commit -m "removed table/model_name"
git push heroku master
heroku run rake db:migrate
heroku restart

这似乎是最好的方法,但会发生什么情况较旧的迁移文件? 他们将保持和更新DB /玛每次运行耙分贝时间:迁移只能由DB重写/迁移/ timestamp_drop_tablename?

我很高兴与第二种方法进行试验,但希望有人与有经验的人在权衡&告诉我这样做的导轨方式。

Answer 1:

第二种方法是处理这种理想的方式:迁移文件是为了表示你的数据库如何随时间而改变。 年长的迁移文件将保留在您的项目(在的情况下,假设,你想退回到旧版本),但是当你的Rails将无法运行它们rake db:migrate ,因为它知道他们已经被运行(基于在数据库中的表schema_migrations数据)。

你schema.rb只会更新一次,以反映你的数据库不再包含该表。

一个小小的调整你的代码:迁移文件应删除该表中up方法,最好在重新创建down的方法。 “向上”表示迁移滴表往前赶,如果迁移回滚,则down方法将被运行。



Answer 2:

我知道这是一个古老的线程。 更多的,往往不是你想删除不只是模型,但路线,控制器与模型以及相关的意见。 要做到这一点,运行这些

rails g migration DropYourModel
rails destroy scaffold YourModelName

编辑迁移文件drop_table ,然后运行

rake db:migrate

如果模型发生在一个命名空间中定义,例如, admins ,替换与所述第一命令

rails destroy scaffold admins/YourModelName


文章来源: What is the best way to drop a table & remove a model in Rails 3?