Как удалить столбцы с помощью миграции 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]
команда выше генерирует файл миграции внутри
чтобы удалить столбец из таблицы, необходимо выполнить следующую миграцию:
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 шага следующим образом:
- писать эту команду
rails g migration remove_column_from_table_name
после выполнения этой команды в терминале один файл, созданный этим именем и меткой времени (remove_column from_table_name).
затем перейдите к этому файлу.
-
внутри файла вы должны написать
remove_column :table_name, :column_name
-
наконец, перейдите к консоли, а затем 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:сильная миграция