Переименование исходного файла миграции в Rails после выполнения rename_table_migration - PullRequest
3 голосов
/ 30 декабря 2011

Я случайно создал модель Query в Rails и недавно обнаружил, что это одно из зарезервированных слов сейчас.

Я переименовал таблицу, используя новый файл миграции, и переименовал все созданные файлы.(название новой модели - Сюжет)

Вопрос: можно ли переименовать исходный файл миграции (20111228212521_create_queries.rb) в 20111228212521_create_plots.rb)

и все, что находится в старом файле:

class CreateQueries < ActiveRecord::Migration
 def change
   create_table :queries do |t|
    t.string :name
    t.text :content

    t.timestamps
    end
   end
 end

до

class CreatePlots < ActiveRecord::Migration
   def change
    create_table :plots do |t|
    t.string :name
    t.text :content

    t.timestamps
    end
   end
 end

??

Я просто не хочу слишком много файлов миграции, а также беспокоюсь, что при переходе на работу могут возникать ошибки..

Ответы [ 4 ]

12 голосов
/ 30 декабря 2011

Вы можете изменить имя файла миграции, но вам нужно выполнить несколько шагов:

  1. rake db: откат до точки отката таблицы запросов.

  2. Теперь измените имя файла миграции, а также его содержимое.

  3. Измените имя любой модели, которая может использовать таблицу.

  4. rake db: migrate

2 голосов
/ 30 декабря 2011

Краткий ответ - просто создать другой файл миграции.

Файлы миграции предназначены для отслеживания каждого изменения в базе данных. Поэтому рекомендуется вносить небольшие одноразовые изменения в отдельный файл. Я не могу говорить за вашу ситуацию, но в моей ситуации, когда я совершаю такую ​​ошибку, я просто создаю новый файл миграции и не проверяю старый файл миграции в системе контроля версий. Таким образом, ошибочные изменения происходят только на моей локальной базе данных и не попадают в prod / dev / staging.

1 голос
/ 17 июня 2015

Помимо откатывания, и особенно полезно, когда вам нужно переименовать миграцию с самого начала производства, теперь вы можете в Rails 4 создать новую миграцию, чтобы переименовать ее.

  1. $ rails generate migration RenamesFooBarr

и затем в методе новой миграции добавьте

rename_table :old_migration_name, :new_migration name

, например:

class RenamesFooBar < ActiveRecord::Migration
   def change
       rename_table :old_foo_bar_name, :new_foo_bar_name
   end
end

Это эффективно позаботится обо всех индексах, также как и вверх, так и вниз, поскольку ActiveRecord распознает rename_table

source: http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

0 голосов
/ 11 марта 2014

Просто сделайте вот так

  1. Откат миграции для этих запросов.т.е. rake db:rollback
  2. Измените файл миграции, имя класса и его содержимое.
  3. Наконец, выполните миграцию базы данных.т.е. rake db:migrate
...