Каков наилучший способ удалить таблицу и удалить модель в 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?



Я рад экспериментировать со вторым методом, но хотел бы, чтобы кто-то с кем-то с опытом взвешивал и рассказывал мне пути рельсов для этого.

892   2  

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

    Ничего не найдено.