Каков наилучший способ удалить таблицу и удалить модель в Rails 3?
у меня есть модель и таблица, которая мне больше не нужна в моем приложении, я мог бы оставить их там, но я хотел бы удалить их, чтобы держать вещи в порядке.
Я пытаюсь выяснить, как лучше всего удалить их, не возясь с моим миграция & db / schema.РБ файлы и любой побочный эффект это может иметь на моей производственной среде, мое приложение находится на Heroku. Я использую PostgreSQL как на моей локальной машине , так и на heroku.
до сих пор я нашел два способа чтобы сделать это, но не уверен, что это лучший метод/ рельсы путь?
Способ 1
Я думал о том, чтобы просто войти в свою базу данных и удалить таблицу, а затем уничтожить модель.
rails db
DROP TABLE table_name
q
rails destroy model model_name
если я сделаю это, что произойдет с миграциями, которые у меня есть для этой модели/таблицы? У меня две миграции для этой модели timestamp_create_modelname & имя add_attribute_to_table.
также Этот метод update db / schema.РБ?
когда я нажимаю приложение на Heroku, я подозреваю, что модель будет удалена, но таблица останется на месте, есть ли команда heroku для удаления таблицы.
Способ
другой способ, о котором я читал, состоял в том, чтобы создать новую миграцию, чтобы удалить таблицу, а затем уничтожить модель.
rails generate migration drop_tablename
& затем обновите файл ниже:
db / migrate / 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/shema каждый раз, когда я запускаю rake db:migrate только для переопределения db/migrate / timestamp_drop_tablename?
Я рад экспериментировать со вторым методом, но хотел бы, чтобы кто-то с кем-то с опытом взвешивал и рассказывал мне пути рельсов для этого.
2 ответов:
второй метод является идеальным способом справиться с этим: ваши файлы миграции предназначены для представления того, как ваша база данных изменилась с течением времени. Старые файлы миграции останутся в вашем проекте (в случае, если гипотетически вы хотите вернуться к более старой версии), но Rails не будет запускать их, когда вы
rake db:migrateпотому что он знает, что они уже были запущены (на основе данных в таблице schema_migrations базы данных).схемы.РБ будет просто обновляться, чтобы отразить, что ваш база данных больше не содержит эту таблицу.
одна незначительная настройка кода: ваш файл миграции должен удалить таблицу в
upметод, и в идеале воссоздать его вdownметод. "Вверх" означает, что ваша миграция отбрасывает таблицу, чтобы двигаться вперед во времени, и если миграция откатывается,downметод будет работать.
Я знаю, что это старый нить. Чаще всего требуется удалить не только модель, но и маршруты, контроллер и представления, связанные с этой моделью. Для этого запустите эти
rails g migration DropYourModel rails destroy scaffold YourModelNameизмените файл миграции на
drop_tableа потом бегиrake db:migrateесли модель определяется в пространстве имен, например,
adminsзамените первую командуrails destroy scaffold admins/YourModelName
Comments