it-swarm.com.ru

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

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

566
Ethan
remove_column :table_name, :column_name

Например:

remove_column :users, :hobby

удалит колонку хобби из таблицы пользователей.

807
Nick Hammond

Для старых версий Rails 

Ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype

Для Rails 3 и выше

Rails generate migration RemoveFieldNameFromTableName field_name:datatype
349
prabu

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, поэтому вы не сможете откатить эту миграцию. 

109
Powers

В приложении Rails4 можно использовать метод change также для удаления столбцов. Третий параметр - это data_type, а в необязательном разделе вы можете указать параметры. Это немного скрыто в разделе «Доступные преобразования» в документации .

class RemoveFieldFromTableName < ActiveRecord::Migration
  def change
    remove_column :table_name, :field_name, :data_type, {}
  end
end
33
Lars Schirrmeister

Есть два хороших способа сделать это:

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

21
superluminary

в 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
13
aschmid

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

10
Xinyang Li
Rails g migration RemoveXColumnFromY column_name:data_type

X = название столбца 
Y = имя таблицы

ПРАВКА

Изменено RemoveXColumnToY на RemoveXColumnFromY согласно комментариям - обеспечивает большую ясность в том, что на самом деле делает миграция.

10
eden

Вы можете попробовать следующее:

remove_column :table_name, :column_name

( Официальная документация )

8
Jordan Running

Чтобы удалить столбец из таблицы, необходимо выполнить следующую миграцию:

Rails g migration remove_column_name_from_table_name column_name:data_type

Затем выполните команду:

rake db:migrate
7
Koresol

Сгенерируйте миграцию для удаления столбца, чтобы при его переносе (rake db:migrate) он должен был {удалить столбец. И он должен добавить столбец обратно, если откат переносится (rake db:rollback).

Синтаксис:

remove_column: table_name,: column_name,: type

Удаляет столбец, также добавляет столбец обратно, если миграция откатывается.

Пример: 

remove_column :users, :last_name, :string

Примечание: Если вы пропустите тип данных, миграция удалит столбец успешно, но если вы откатите миграцию, произойдет ошибка.

6
Imran

Дайте ниже команду, которую он добавит в файл миграции самостоятельно

Rails g migration RemoveColumnFromModel

После выполнения вышеупомянутой команды вы можете проверить, что файл миграции код remove_column должен быть добавлен туда самостоятельно

Затем перенести БД

rake db:migrate
5
prash

Для удаления столбца из таблицы достаточно выполнить 3 простых шага:

  1. написать эту команду 

Rails g migration remove_column_from_table_name

после выполнения этой команды в терминале один файл создается с этим именем и отметкой времени (remove_column from_table_name).

Затем перейдите к этому файлу.

  1. внутри файла вы должны написать

    remove_column :table_name, :column_name

  2. Наконец, перейдите в консоль, а затем выполните

    rake db:migrate

5
Karan Bamniya

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

4
Dharmesh Rupani

Делай как это;

Rails g migration RemoveColumnNameFromTables column_name:type

То есть Rails g migration RemoveTitleFromPosts title:string

В любом случае, было бы лучше рассмотреть также и время простоя, поскольку ActiveRecord кэширует столбцы базы данных во время выполнения, поэтому, если вы отбрасываете столбец, это может вызвать исключения до перезагрузки вашего приложения.

Ссылка: Сильная миграция

1
Nuttapon

Через
remove_column :table_name, :column_name
в файле миграции

Вы можете удалить столбец непосредственно в консоли Rails, набрав:
ActiveRecord::Base.remove_column :table_name, :column_name

0
Manh Cuong

Простые пошаговые инструкции для Rails 5.2

ВНИМАНИЕ: Вы потеряете данные, если удалите столбец из своей базы данных. Чтобы продолжить, см. Ниже:


1. Создайте миграцию

  • Запустите следующую команду в вашем терминале: 

Rails generate migration remove_fieldname_from_tablename fieldname:string

  • Примечание: имя таблицы должно быть во множественном числе в соответствии с соглашением Rails.

Пример:

  • В моем случае я хочу удалить столбец accepted (логическое значение) из таблицы quotes

Rails g migration RemoveAcceptedFromQuotes accepted:boolean

Существует специальный синтаксический ярлык для генерации миграций, которые добавляют поля к таблице.

Rails генерирует миграцию 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

.... А потом ты отправляешься на гонки!

0
BKSpurgeon

Просто, Вы можете удалить столбец

remove_column :table_name, :column_name

Например,

remove_column :posts, :comment
0
Foram Thakral