Відповіді:
remove_column :table_name, :column_name
Наприклад:
remove_column :users, :hobby
видалить стовпчик хобі з таблиці користувачів.
remove_column :table_name, :column_name, :type, :options
в межах change
методу, оскільки якщо вказати тип повернення, можлива міграція. З документації: Параметри type
і options
ігноруються, якщо вони є. Це може бути корисно надати їх change
методом міграції, щоб їх можна було повернути. У такому випадку type
і options
буде використовуватися add_column.
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
Для рейок 3 і вище
rails generate migration RemoveFieldNameFromTableName field_name:datatype
rails g migration remove_field_name_from_table_name field_name:datatype
також працює
AddXXXtoTTT
після RemoveXXXFromTTT
може бути доданий список із зазначенням білого інтервалу file_name: data_type та будуть створені відповідні оператори add_column та Remove_column: rails g migration RemoveUnusefulFieldsFromUsers hair_color:string favorite_number:integer
видалення двох атрибутів за допомогою однієї міграції. Зауважте також, що метод remove_column
не підтримується change
, тому вам потрібно написати і up
і down
.
change
це. Відкат працює як слід.
change
метод, який можна повернути *, вам потрібно повідомити про тип даних (та всі інші модифікатори поля), тож якщо ви відкатуєте цю міграцію, поле можна буде правильно відтворити. * Коли я скажу, що повернуто, це стосується структури бази даних, звичайно, дані з цього стовпця, очевидно, будуть втрачені.
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
Переконайтеся, що не використовуйте метод змін, видаляючи стовпці з таблиці бази даних (приклад того, що ви не хочете, щоб перенести файл міграції в додатках Rails 3):
def change
remove_column :table_name, :field_name
end
Метод зміни в Rails 3 не є розумним, коли справа доходить до видалення колонки, тому ви не зможете відкатати цю міграцію.
change
метод Rails 3 , тоді rake db:rollback
команда помилиться . rake db:rollback
в основному протилежне rake db:migrate
. Ця помилка була виправлена в Rails 4 :)
У додатку rails4 можна використовувати метод зміни також для видалення стовпців. Третій парам - тип даних і в додатковому варіанті далі ви можете надати варіанти. Це трохи приховано у розділі "Доступні перетворення" документації .
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 :users do |t|
t.remove :first_name
end
Я вважаю за краще це, оскільки мені здається більш розбірливим, і ви можете внести відразу кілька змін.
Ось повний список підтримуваних методів змін змін:
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
в рейках 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: ім'я таблиці,: ім'я стовпця,: тип
Видаляє стовпчик, а також додає стовпчик назад, якщо міграція відкидається .
Приклад:
remove_column :users, :last_name, :string
Примітка . Якщо ви пропустите тип даних , міграція буде успішно видалити стовпець, але якщо ви повернете міграцію, вона призведе до помилки.
Виконайте таку команду у своєму терміналі:
rails generate migration remove_fieldname_from_tablename fieldname:fieldtype
Примітка: Назва таблиці має бути у множині згідно з умовами рейки.
Приклад:
У моєму випадку я хочу видалити accepted
стовпець (булеве значення) із quotes
таблиці:
rails g migration RemoveAcceptedFromQuotes accepted:boolean
Дивіться документацію про : конвенцію при додаванні / видаленні полів до таблиці:
Існує спеціальний синтаксичний ярлик для генерації міграцій, які додають поля до таблиці.
рейки генерують міграцію add_fieldname_to_tablename назва поля: тип поля
# 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 g migration RemoveXColumnFromY column_name:data_type
X = назва стовпця
Y = назва таблиці
EDIT
Змінено відповідно 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)
Через
remove_column :table_name, :column_name
файл міграції
Ви можете видалити стовпчик безпосередньо в консолі рейки, ввівши:
ActiveRecord::Base.remove_column :table_name, :column_name
Робіть так;
rails g migration RemoveColumnNameFromTables column_name:type
Тобто rails g migration RemoveTitleFromPosts title:string
У будь-якому випадку, було б краще подумати про час простою, оскільки ActiveRecord кешує стовпці бази даних під час виконання, тому якщо ви скинете стовпець, це може спричинити винятки, поки ваша програма не перезавантажиться.
Ref: Сильна міграція
Просто стовпчик можна видалити
remove_column :table_name, :column_name
Наприклад,
remove_column :posts, :comment
up
таdown
методами, а неchange
, як пояснено у відповіді @Powers.