Rails 3.1 добавляет столбцы с помощью change_table миграции - PullRequest
5 голосов
/ 20 июля 2011

У меня есть одна таблица с именем profiles с несколькими столбцами.

Теперь я хочу добавить несколько столбцов в эту таблицу, используя change -метод в рельсах 3.1. Я создал миграцию со следующим кодом:

def change
  change_table :profiles do |t|
    t.string :photo
    t.string :name
    t.references :user
  end
end

Миграция работает отлично, но когда я хочу выполнить откат, я получаю

SQLite3::SQLException: duplicate column name: photo: ALTER TABLE "profiles" ADD "photo" varchar(255)

Есть идеи, почему?

Ответы [ 2 ]

5 голосов
/ 20 июля 2011

Автоматически сгенерированные миграции для добавления столбцов в Rails 3.1 имеют формат:

class AddColumnToTable < ActiveRecord::Migration
  def change
    add_column :table, :column, :type
  end
end

Возможно, попробуете этот синтаксис?

0 голосов
/ 27 ноября 2013

Похоже, вы должны указать миграции, как восстановить себя:

def change
  change_table :profiles do |t|
    t.string :photo
    t.string :name
    t.references :user
  end

  reversible do |dir|
    dir.down do
      remove_column :profiles, :photo
      remove_column :profiles, :name
      remove_column :profiles, :user_id
    end
  end
end

См. http://guides.rubyonrails.org/migrations.html#using-reversible для получения дополнительной информации.

В качестве альтернативы вы можете попробовать использовать старыйМетоды вверх и вниз, которые все еще доступны, вот так:

def up
  change_table :profiles do |t|
    t.string :photo
    t.string :name
    t.references :user
  end
end

def down
  remove_column :profiles, :photo
  remove_column :profiles, :name
  remove_column :profiles, :user_id
end

Подробнее о взлете и падении здесь: http://guides.rubyonrails.org/migrations.html#using-the-up-down-methods

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