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

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

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 был обновлен, поэтому метод change можно использовать в миграции для удаления столбца, и миграция успешно откатится. Пожалуйста, прочитайте следующее предупреждение для 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

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

  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

вы также можете сделать это с помощью блока 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 = имя столбца
Г = имя таблицы

редактировать

изменить 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 код должен быть добавлен там самостоятельно

затем перенесите db

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. наконец, перейдите к консоли, а затем do

    rake db:migrate


remove_column на 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

Примечание. имя таблицы pluralize: users

синтаксис:

remove_column :имя_таблицы, :имя_столбца, :типа

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

пример:

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:сильная миграция