Обновление моделей в рельсах / миграциях - PullRequest
7 голосов
/ 26 июня 2010

Допустим, я использовал следующую команду для создания модели "Пользователь":

script/generate model User username:string

Это создает файл user.rb вместе с файлом rb миграции для создания таблицы Users. Теперь я хочу добавить столбец электронной почты в мою модель User. Какой лучший способ сделать это? Я делаю это вручную и пишу файл миграции вручную или есть ярлык для этого? Если я пишу миграцию вручную, нужно ли называть ее так же, как предыдущий сценарий миграции (с отметкой времени впереди), чтобы гарантировать, что он выполняется после предыдущей миграции?

Ответы [ 3 ]

6 голосов
/ 27 июня 2010

Не беспокойтесь о отметке времени. Он будет сгенерирован автоматически. Вы можете сделать

script\generate migration add_email_to_user email:string

Это автоматически создаст файл миграции, который будет выглядеть следующим образом:

class AddEmailToUser < ActiveRecord::Migration
  def self.up
    add_column :email, :string
  end

  def self.down
    remove_column :email
  end
end

файл будет иметь метку времени в формате YYYYMMDDHHMMSS (для Rails 2.1 и выше), добавляемый перед именем файла.

2 голосов
/ 27 июня 2010

Руководство содержит информацию о создании миграций.Если вы используете генератор рельсов, он создаст правильно названные файлы:

ruby script/generate migration AddEmailToUser email:string
1 голос
/ 27 июня 2010

Ну, вы можете сделать две вещи:

1) Если вы еще не развернули это нигде или не возражаете сбросить базу данных и снова запустить миграцию, измените файл. Удалите таблицы из вашей базы данных и запустите db: migrate. Это легко сделать в разработке.

2) Если это приложение работает, или вы не хотите отбрасывать все свои таблицы. Затем создайте новый файл миграции. Затем в этой новой миграции добавьте / измените / удалите столбец. Затем запустите db: migrate, и новые изменения вступят в силу в вашей таблице. Это лучшая практика.

Что касается наименования вашей миграции, то используются временные метки, потому что rails создаст таблицу, которая будет отслеживать последние выполненные миграции. Для этого лучше использовать временные метки. Но если вы выберете, вы можете использовать свое собственное соглашение вместо меток времени. Возможно, назовите их 001_migration.rb, 002_migration.rb и т. Д.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...