Rails 5: Как удалить столбец из базы данных?

Какова команда удаления существующего столбца из таблицы с использованием миграции?

Я хочу удалить столбец: country:string

Из таблицы: sample_apps

Ответ 1

Чтобы удалить столбец с миграцией:

rails g migration Remove..From.. col1:type col2:type col3:type

В твоем случае:

rails g migration RemoveCountryFromSampleApps country:string

Это приведет к следующей миграции в Rails 5.0:

class RemoveCountryFromSampleApps < ActiveRecord::Migration[5.0]
  def change
    remove_column :sample_apps, :country, :string
  end
end

Ответ 2

Создать файл миграции:

$ rails generate migration RemoveCountryFromSampleApps country:string

В сгенерированном файле миграции:

class RemoveCountryFromSampleApps < ActiveRecord::Migration
 def change
   remove_column :sample_apps, :country, :string
 end
end

Затем выполните:

 rake db:migrate

Ответ 3

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

rails g migration remove_post_id_from_comments post_id:integer:index

файл миграции:

class RemovePostIdFromComments < ActiveRecord::Migration
  def change
    remove_index :comments, :post_id
    remove_column :comments, :post_id, :integer
  end
end

затем выполните: rake db:migrate

Ответ 4

Чтобы удалить столбец (страна здесь) из таблицы (sample_case)

rails generate migration RemoveCountryfromSampleCase country:string

Выше команды должен сгенерировать файл YYYYMMDDHHMMSS_remove_countryfrom_sample_case.rb. в папке db/migrate

class RemoveCountryFromSampleCase < ActiveRecord::Migration[5.0]
  def change
    remove_column :sample_case, :country, :string
  end
end

В моем случае (я делал это для более чем двух столбцов) появляется только это

 class RemoveCountryFromSampleCase < ActiveRecord::Migration[5.0]
  def change
  end
 end

Строка remove_column отсутствовала, поэтому я добавил ее вручную, а затем запустил команду

rails db:migrate

и это сработало для меня.

Ссылки fooobar.com/questions/15501/... и руководство Ruby по миграции Active Record https://edgeguides.rubyonrails.org/active_record_migrations.html

Ответ 5

Вам нужно указать тип?

Почему бы не просто remove_column :sample_apps, :country или remove_column :comments, :post_id для примеров здесь? Кажется, работает и удаляет шанс на ошибку (текст или строку).