Какой синтаксис для удаления столбца таблицы базы данных через миграцию Rails?
Как удалить столбцы с помощью миграции Rails
Ответ 1
remove_column :table_name, :column_name
Например:
remove_column :users, :hobby
удалит колонку хобби из таблицы пользователей.
Ответ 2
Для более старых версий Rails
ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype
Для Rails 3 и выше
rails generate migration RemoveFieldNameFromTableName field_name:datatype
Ответ 3
Rails 4 обновлен, поэтому метод изменения можно использовать в процессе переноса, чтобы удалить столбец, и миграция будет успешно отменена. Прочтите следующее предупреждение для приложений Rails 3:
Предупреждения Rails 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
Обязательно не используйте метод изменения при удалении столбцов из таблицы базы данных (пример того, чего вы не хотите в файле миграции в приложениях Rails 3):
def change
remove_column :table_name, :field_name
end
Метод изменения в Rails 3 не является умным, когда дело доходит до remove_column, поэтому вы не сможете откатить эту миграцию.
Ответ 4
В приложении rails4 можно использовать метод изменения также для удаления столбцов. Третий параметр - тип data_type, а в необязательном варианте вы можете указать параметры. Это немного скрыто в разделе "Доступные преобразования" в документации.
class RemoveFieldFromTableName < ActiveRecord::Migration
def change
remove_column :table_name, :field_name, :data_type, {}
end
end
Ответ 5
Есть два хороших способа сделать это:
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
Ответ 6
в рельсах 5 вы можете использовать эту команду в терминале:
rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE
например, чтобы удалить столбец access_level (string) из пользователей таблицы:
rails generate migration remove_access_level_from_users access_level:string
а затем запустите:
rake db:migrate
Ответ 7
Вы можете попробовать следующее:
remove_column :table_name, :column_name
Ответ 8
Удалить столбцы для приложения 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, которое можно найти здесь здесь.
Ответ 9
rails g migration RemoveXColumnFromY column_name:data_type
X = имя столбца
Y = имя таблицы
ИЗМЕНИТЬ
Изменено RemoveXColumnToY
до RemoveXColumnFromY
в соответствии с комментариями - обеспечивает большую ясность в отношении того, что делает миграция.
Ответ 10
Сгенерируйте миграцию для удаления столбца, чтобы при его переносе (rake db:migrate
) столбец удалялся. И это должно добавить столбец обратно, если эта миграция откатывается (rake db:rollback
).
Синтаксис:
remove_column: table_name,: column_name,: type
Удаляет столбец, а также добавляет столбец обратно, если миграция откатывается.
Пример:
remove_column :users, :last_name, :string
Примечание. Если вы пропустите тип данных, миграция удалит столбец успешно, но если вы откатите миграцию, она выдаст ошибку.
Ответ 11
Ясные и простые инструкции для Rails 5.2
ВНИМАНИЕ: Вы потеряете данные, если удалите столбец из своей базы данных. Чтобы продолжить, см. Ниже:
1. Создайте миграцию
- Запустите следующую команду в вашем терминале:
rails generate migration remove_fieldname_from_tablename fieldname:string
- Примечание: имя таблицы должно быть во множественном числе в соответствии с соглашением о рельсах.
Пример:
- В моем случае я хочу удалить
accepted
столбец (логическое значение) из таблицыquotes
:
rails g migration RemoveAcceptedFromQuotes accepted:boolean
- См. Документацию re: соглашение при добавлении/удалении полей в таблицу:
Существует специальный синтаксический ярлык для генерации миграций, которые добавляют поля в таблицу.
рельсы генерируют миграцию add_fieldname_to_tablename fieldname: string
2. Проверьте миграцию
# 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
3. Запустите миграцию
rake db:migrate
.... А потом ты отправляешься на гонки!
Ответ 12
Чтобы удалить столбец из таблицы, вы должны выполнить следующую миграцию:
rails g migration remove_column_name_from_table_name column_name:data_type
Затем выполните команду:
rake db:migrate
Ответ 13
Дайте ниже команду, она добавит в файл миграции самостоятельно
rails g migration RemoveColumnFromModel
После выполнения над командой вы можете проверить файл миграции. Код remove_column должен быть добавлен там
Затем перенесите db
rake db:migrate
Ответ 14
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
Ответ 15
Чтобы удалить столбец из таблицы всего за 3 шага, выполните следующие действия:
- напишите эту команду
rails g migration remove_column_from_table_name
после запуска этой команды в файле терминала, созданного этим именем и отметкой времени (remove_column from_table_name).
Затем перейдите к этому файлу.
-
внутри файла вы должны написать
remove_column :table_name, :column_name
-
Наконец, идите в консоль, а затем выполните
rake db:migrate
Ответ 16
Через remove_column :table_name, :column_name
в файле миграции
Вы можете удалить столбец непосредственно в консоли rails, набрав: ActiveRecord::Base.remove_column :table_name, :column_name
Ответ 17
Сделайте это так;
rails g migration RemoveColumnNameFromTables column_name:type
Ie rails g migration RemoveTitleFromPosts title:string
В любом случае, было бы лучше подумать о простоях, так как ActiveRecord кэширует столбцы базы данных во время выполнения, поэтому, если вы удаляете столбец, это может привести к исключениям, пока ваше приложение не перезагрузится.
Ссылка: Сильная миграция
Ответ 18
Просто, Вы можете удалить столбец
remove_column :table_name, :column_name
Например,
remove_column :posts, :comment
Ответ 19
Вот еще один из рельсов консоли
ActiveRecord::Migration.remove_column(:table_name, :column_name)