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
для примеров здесь? Кажется, работает и удаляет шанс на ошибку (текст или строку).