我的应用程序中不再需要模型和表格,我可以将它们留在那里,但我想删除它们以保持整洁。
我正在尝试找出删除它们的最佳方法,而不会弄乱我的迁移和db/schema.rb文件以及它可能对我的生产环境产生的任何副作用,我的应用程序在 Heroku 上。我在本地机器和 heroku 上都使用 PostgreSQL。
到目前为止,我已经找到了两种方法来做到这一点,但不确定哪种是最好的方法/导轨方式?
方法一
我想过只是进入我的数据库并删除表然后销毁模型。
rails db
DROP TABLE table_name
\q
rails destroy model model_name
如果我这样做,我对此模型/表的迁移会发生什么?我对此模型有两个迁移,一个timestamp_create_modelname和一个 add_attribute_to_table 名称。
此方法还会更新db/schema.rb文件吗?
当我将应用程序推送到 Heroku 时,我怀疑模型将被删除但表格将保留在原处,是否有 heroku 命令删除表格。
方法二
我读到的另一种方法是生成一个新的迁移来删除表然后销毁模型。
rails generate migration drop_tablename
& 然后更新以下文件:
db/migrate/timestamp_drop_tablename (针对 Dan Wich 下面的回答进行了更新)
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
这似乎是最好的方法,但是旧的迁移文件会发生什么?每次我运行 rake db:migrate 时它们是否会保留并更新 db/schema 只是被 db/migrate/timestamp_drop_tablename 覆盖?
我很高兴尝试第二种方法,但希望有经验的人参与并告诉我这样做的方法。