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