Ответы:
remove_column :table_name, :column_name
Например:
remove_column :users, :hobby
удалит колонку хобби из таблицы пользователей.
remove_column :table_name, :column_name, :type, :options
в change
методе, так как если вы укажете тип, возможен возврат к миграции. Из документации: и параметры будут игнорироваться , если присутствует. Может быть полезно предоставить их в методе миграции, чтобы его можно было восстановить. В этом случае и будет использоваться add_column. type
options
change
type
options
change
методе, но только если вы укажете тип столбца. Например remove_column, :table_name, :column_name, :column_type
. В противном случае вы получите следующую ошибку при попытке запустить миграцию:remove_column is only reversible if given a type
Для старых версий Rails
ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype
Для Rails 3 и выше
rails generate migration RemoveFieldNameFromTableName field_name:datatype
rails g migration remove_field_name_from_table_name field_name:datatype
также работает
AddXXXtoTTT
RemoveXXXFromTTT
rails g migration RemoveUnusefulFieldsFromUsers hair_color:string favorite_number:integer
remove_column
change
up
down
change
это. Откат работает как надо.
change
метод, который можно отменить *, вам нужно будет сообщить тип данных (и все другие модификаторы полей), поэтому, если вы откатите эту миграцию, поле можно будет воссоздать правильно. * Когда я говорю «возвращено», это с точки зрения структуры базы данных, конечно, данные из этого столбца, очевидно, будут потеряны.
Rails 4 был обновлен, поэтому метод переноса может использоваться для переноса столбца, и перенос будет успешно откатан. Пожалуйста, прочитайте следующее предупреждение для приложений Rails 3:
Rails 3 Warning
Обратите внимание, что при использовании этой команды:
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
Метод change в Rails 3 не очень умен, когда дело доходит до remove_column, поэтому вы не сможете откатить эту миграцию.
change
метод, rake db:rollback
команда выдаст ошибку. rake db:rollback
в основном противоположность rake db:migrate
. Эта ошибка была исправлена в Rails 4 :)
В приложении rails4 можно использовать метод change также для удаления столбцов. Третий параметр - это data_type, а в необязательном разделе вы можете указать параметры. Это немного скрыто в разделе «Доступные преобразования» в документации .
class RemoveFieldFromTableName < ActiveRecord::Migration
def change
remove_column :table_name, :field_name, :data_type, {}
end
end
Есть два хороших способа сделать это:
Вы можете просто использовать remove_column, вот так:
remove_column :users, :first_name
Это хорошо, если вам нужно всего лишь внести одно изменение в вашу схему.
Вы также можете сделать это, используя блок 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 (строка) из таблицы пользователей:
rails generate migration remove_access_level_from_users access_level:string
и затем запустите:
rake db:migrate
Создайте миграцию, чтобы удалить столбец, так что если он перенесен ( rake db:migrate
), он должен удалить столбец . И это должно добавить столбец обратно, если эта миграция откатывается (rake db:rollback
).
Синтаксис:
remove_column: table_name,: column_name,: type
Удаляет столбец, а также добавляет столбец обратно, если миграция откатывается.
Пример:
remove_column :users, :last_name, :string
Примечание . Если вы пропустите тип data_type , миграция удалит столбец успешно, но если вы откатите миграцию, она выдаст ошибку.
Запустите следующую команду в вашем терминале:
rails generate migration remove_fieldname_from_tablename fieldname:fieldtype
Примечание: имя таблицы должно быть во множественном числе в соответствии с соглашением о рельсах.
Пример:
В моем случае я хочу удалить accepted
столбец (логическое значение) из quotes
таблицы:
rails g migration RemoveAcceptedFromQuotes accepted:boolean
См. Документацию re: соглашение о добавлении / удалении полей в таблицу:
Существует специальный синтаксический ярлык для генерации миграций, которые добавляют поля в таблицу.
рельсы генерируют миграцию add_fieldname_to_tablename fieldname: fieldtype
# db/migrate/20190122035000_remove_accepted_from_quotes.rb
class RemoveAcceptedFromQuotes < ActiveRecord::Migration[5.2]
# with rails 5.2 you don't need to add a separate "up" and "down" method.
def change
remove_column :quotes, :accepted, :boolean
end
end
rake db:migrate
.... А потом ты отправляешься на гонки!
rails db:migrate
Удалить столбцы для приложения RAILS 5
rails g migration Remove<Anything>From<TableName> [columnName:type]
Команда выше генерирует файл миграции внутри db/migrate
каталога. Фрагмент фрагмента - это один из столбцов удаления из таблицы, сгенерированный генератором Rails,
class RemoveAgeFromUsers < ActiveRecord::Migration
def up
remove_column :users, :age
end
def down
add_column :users, :age, :integer
end
end
Я также сделал краткое справочное руководство по Rails, которое можно найти здесь .
Вы можете попробовать следующее:
remove_column :table_name, :column_name
rails g migration RemoveXColumnFromY column_name:data_type
X = имя столбца
Y = имя таблицы
РЕДАКТИРОВАТЬ
Изменено RemoveXColumnToY
в RemoveXColumnFromY
согласно комментариям - обеспечивает большую ясность для того, что миграция на самом деле делает.
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
Для удаления столбца из таблицы достаточно выполнить 3 простых шага следующим образом:
rails g migration remove_column_from_table_name
после выполнения этой команды в терминале один файл создается с этим именем и отметкой времени (remove_column from_table_name).
Затем перейдите к этому файлу.
внутри файла вы должны написать
remove_column :table_name, :column_name
Наконец, перейдите в консоль, а затем выполните
rake db:migrate
Вот еще один из рельсов консоли
ActiveRecord::Migration.remove_column(:table_name, :column_name)
Делай как это;
rails g migration RemoveColumnNameFromTables column_name:type
Т.е. rails g migration RemoveTitleFromPosts title:string
В любом случае, было бы лучше рассмотреть также и время простоя, поскольку ActiveRecord кэширует столбцы базы данных во время выполнения, поэтому, если вы уроните столбец, это может вызвать исключения до перезагрузки вашего приложения.
Ссылка: сильная миграция
Просто, Вы можете удалить столбец
remove_column :table_name, :column_name
Например,
remove_column :posts, :comment
up
иdown
методами, а не такchange
, как объяснено в ответе @Powers.