アプリに不要になったモデルとテーブルがあります。そのままにしておくこともできますが、整理整頓のために削除したいと思います。
移行やdb/schema.rbファイル、および本番環境に与える可能性のある副作用をいじることなく、それらを削除するための最良の方法を見つけようとしています。私のアプリはHerokuにあります。ローカルマシンとherokuの両方でPostgreSQLを使用しています。
これまでのところ、これを行う2つの方法を見つけましたが、どちらが最良の方法/レールの方法かわかりませんか?
方法1
データベースにアクセスしてテーブルを削除し、モデルを破棄することを考えました。
rails db
DROP TABLE table_name
\q
rails destroy model model_name
これを行うと、このモデル/テーブルの移行はどうなりますか?このモデルには、timestamp_create_modelnameとadd_attribute_to_tablenameの2つの移行があります。
また、このメソッドはdb / schema.rbファイルを更新しますか?
アプリをHerokuにプッシュすると、モデルは削除されますが、テーブルはそのまま残ります。テーブルを削除するためのherokuコマンドはありますか。
方法2
私が読んだもう1つの方法は、新しい移行を生成してテーブルを削除してからモデルを破棄することでした。
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によってオーバーライドされるだけですか?
私は2番目の方法を試してみてうれしいですが、経験のある人に量ってもらい、これを行うための方法を教えてもらいたいと思います。