Вопрос

Эй, ребята, когда я впервые начнем проект Rails, модель моделей была разработана и создана. Ведь миграционная часть, она успешно создала таблицу «пользователей» на Postgres. Ну, то после выполнения некоторых изменений во время проекта я понял, что отсутствует атрибут / новый столбец за столом.

Итак, что я сделал, было удалить пользователей стола из Postgres и добавить новую колонку в моем первом миграционном классе Ruby:

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.string :name
      t.string :password
      t.string :email
      t.string :authorization_token //this is the new attribute that I insert
      t.datetime :created_at
      t.datetime :updated_at

      t.timestamps
    end
  end

  def self.down
    drop_table :users
  end
end

Итак, когда я запускаю снова БД: мигрировать прыгать, что новый пользовательский стол будет создан с новым атрибутом: authorization_token, он не работает, но без ошибок.

(Я знаю, что не должен удалить стол, есть еще один умный способ сделать это)

Это было полезно?

Решение

Миграции выполняются один раз и сохраняются в базе данных, как использовалось (посмотрите в таблицу Schema_migrations). Вы можете попробовать использовать Rakes DB: Migrate: Reset, чтобы повторно запустить начальную миграцию, но лучше просто добавить новые миграции (вы не захотите вручить вашу базу данных, когда она имеет данные в нем) следующим образом:

Сценарий / генерировать миграцию Add_authorization_token_to_users authorization_token: string

который будет генерировать что-то похожее на следующее:

class AddAuthorizationTokenToUsers < ActiveRecord::Migration
  def self.up
    change_table :users do |t|
      t.string :authorization_token //this is the new attribute that I insert
    end
  end

  def self.down
    remove_column :users, :authorization_token
  end
end

Чтобы увидеть, как добавить / удалить столбец, Change_Table, и т. Д. Работа, посмотрите на ActiveReCord :: ConnectionAppapers :: Схемы в http://api.rubyonrails.org. или http://guides.rubyonrails.org/migrations.html.

Другие советы

Совет для работы с Rails - не передайте свои таблицы с помощью SQL. Когда вы видели проблему, вы должны написать новую миграцию, подобную @nruth, показал. Запуск граблей: команда миграции будет работать нормально для вас.

В этом случае, поскольку вы уже удалили таблицу «пользователей», теперь у вас сейчас есть проблема, что схема вашей базы данных не может быть синхронизирована с помощью того, какие рельсы это так. Чтобы исправить эту проблему, вы сможете либо получить схему базы данных, чтобы примерно соответствовать, какие рельсы думают, что это вручную, создавая таблицу пользователей, запущенную нижнюю миграцию, а затем миграцию. Или вы можете получить рельсы до скорости с тем, что таблица «пользователей больше не существует». Rails хранит информацию миграции в таблице Schema_info (Rails <2.1) или таблицу Schema_Migrations (Rails> = 2.1). Если вы удалите эту таблицу, затем Rails подумает, что схема не существует и пытается запустить все миграции вверх и воссоздать таблицу пользователей снова.

Наконец, со временем вы можете накапливать ряд миграций, которые индивидуально добавляют столбец или два, которые вы забыли включить. Если вы еще не отправили или не отправили в производстве, то вы можете написать миграцию такого рода базовых линий вашего стола. Это будет выглядеть что-то подобное:

class CreateBaselineUsers < ActiveRecord::Migration
  def self.up
    create_table :users, :force => true do |t|
      t.string :name
      ...

Это принудительно упадет в таблицу и воссоздает его всеми атрибутами, которые вы хотите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top