Как удалить столбцы с помощью миграции Rails


каков синтаксис для удаления столбца таблицы базы данных через миграцию Rails?

16 518

16 ответов:

remove_column :table_name, :column_name

например:

remove_column :users, :hobby

удалить столбец хобби из таблицы users.

для более старых версий Rails

ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype

для рельсов 3 и до

rails generate migration RemoveFieldNameFromTableName field_name:datatype

Rails 4 был обновлен, поэтому метод изменения можно использовать в миграции для удаления столбца, и миграция будет успешно откатываться. Пожалуйста, прочитайте следующее предупреждение для Rails 3 приложений:

Рельсы 3 Предупреждение

обратите внимание, что при использовании этой команды:

rails generate migration RemoveFieldNameFromTableName field_name:datatype

сгенерированная миграция будет выглядеть примерно так:

  def up
    remove_column :table_name, :field_name
  end

  def down
    add_column :table_name, :field_name, :datatype
  end

не используйте метод изменения при удалении столбцов из a таблица базы данных (пример того, что вы не хотите в файле миграции в Rails 3 apps):

  def change
    remove_column :table_name, :field_name
  end

метод изменения в Rails 3 не является умным, когда дело доходит до remove_column, поэтому вы не сможете откатить эту миграцию.

в приложении rails4 можно использовать метод изменения также для удаления столбцов. Третий параметр-это data_type, и в дополнительном forth вы можете указать параметры. Это немного скрыто в разделе "доступные преобразования" на документация .

class RemoveFieldFromTableName < ActiveRecord::Migration
  def change
    remove_column :table_name, :field_name, :data_type, {}
  end
end

есть два хороших способа сделать это:

remove_column

вы можете просто использовать remove_column, например:

remove_column :users, :first_name

это нормально, если вам нужно только внести одно изменение в схему.

change_table block

вы также можете сделать это с помощью блока change_table, например:

change_table :users do |t|
  t.remove :first_name
end

Я предпочитаю это, как я нахожу его более разборчивым, и вы можете сделать несколько изменений сразу.

вот полный список поддерживаемые методы change_table:

http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table

в Rails 5 Вы можете использовать эту команду в терминале:

rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE

например, чтобы удалить столбец access_level (string) из таблицы users:

rails generate migration remove_access_level_from_users access_level:string

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

rake db:migrate
rails g migration RemoveXColumnFromY column_name:data_type

X = имя столбца
Г = имя таблицы

EDIT

изменить RemoveXColumnToY to RemoveXColumnFromY как в комментарии - обеспечивает большую ясность для того, что миграция на самом деле делает.

удалить столбцы для RAILS 5 App

rails g migration Remove<Anything>From<TableName> [columnName:type]

команда выше создать файл миграции внутри

remove_column :table_name, :column_name

(документы.)

удалить столбец из таблицы вы должны выполнить следующие миграции:

rails g migration remove_column_name_from_table_name column_name:data_type

затем выполните команду:

rake db:migrate

дайте ниже команду, которую он добавит в файл миграции самостоятельно

rails g migration RemoveColumnFromModel

после выполнения выше команды вы можете проверить файл миграции remove_column код должен быть добавлен туда самостоятельно

затем перенесите БД

rake db:migrate

для удаления столбца из таблицы всего за 3 шага следующим образом:

  1. писать эту команду

rails g migration remove_column_from_table_name

после выполнения этой команды в терминале создается один файл с этим именем и меткой времени (remove_column from_table_name).

затем перейдите к этому файлу.

  1. внутри файла вы должны написать

    remove_column :table_name, :column_name

  2. наконец, перейдите к консоли, а затем делай

    rake db:migrate

remove_column in change способ поможет вам удалить столбец из таблицы.

class RemoveColumn < ActiveRecord::Migration
  def change
    remove_column :table_name, :column_name, :data_type
  end
end

перейти по этой ссылке для полной справки:http://guides.rubyonrails.org/active_record_migrations.html

создать миграцию для удаления столбца таким образом, что если он переносится (rake db:migrate), он должен удалить столбец. И он должен добавить статью если эта миграция откатывается (rake db:rollback).

синтаксис:

remove_column :table_name,: column_name

удаляет столбец, но не удается добавить столбец обратно на откат.

пример:

remove_column :users, :last_name

Примечание. во множественном имя таблицы: пользователи

синтаксис:

remove_column :table_name,: column_name,: type

удаляет столбец, также добавляет столбец если миграция откатывается.

пример:

remove_column :users, :last_name, :string

удачи в кодировании!

через
remove_column :table_name, :column_name
в файле миграции

вы можете удалить столбец непосредственно в консоли rails, введя:
ActiveRecord::Base.remove_column :table_name, :column_name

сделать так:

rails g migration RemoveColumnNameFromTables column_name:type

то есть rails g migration RemoveTitleFromPosts title:string

в любом случае, было бы лучше подумать о времени простоя, так как ActiveRecord кэширует столбцы базы данных во время выполнения, поэтому, если вы удалите столбец, это может вызвать исключения до перезагрузки вашего приложения.

Ref:сильная миграция