Jak zrzucić kolumny za pomocą migracji Rails

Jaka jest składnia upuszczania kolumny tabeli bazy danych przez migrację Rails?

Author: Andrei Eliade, 2010-05-14

16 answers

remove_column :table_name, :column_name

Na przykład:

remove_column :users, :hobby

Usunie kolumnę hobby z tabeli users.

 765
Author: Nick Hammond,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-09 15:03:13

Dla starszych wersji Rails

ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype

Dla Rails 3 i up

rails generate migration RemoveFieldNameFromTableName field_name:datatype
 339
Author: prabu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-11 01:54:51

Rails 4 został zaktualizowany, więc metoda change może być użyta w migracji do upuszczania kolumny i migracja z powodzeniem zostanie wycofana. Proszę przeczytać następujące ostrzeżenie dla aplikacji Rails 3:

Rails 3 Warning

Należy pamiętać, że podczas korzystania z tego polecenia:

rails generate migration RemoveFieldNameFromTableName field_name:datatype

Wygenerowana migracja będzie wyglądać mniej więcej tak:

  def up
    remove_column :table_name, :field_name
  end

  def down
    add_column :table_name, :field_name, :datatype
  end

Upewnij się, że nie używasz metody change podczas usuwania kolumn z tabeli bazy danych (przykład nie chcę w pliku migracji w aplikacjach Rails 3):

  def change
    remove_column :table_name, :field_name
  end

Metoda change w Rails 3 nie jest inteligentna, jeśli chodzi o remove_column, więc nie będziesz mógł cofnąć tej migracji.

 106
Author: Powers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-10 20:17:07

W aplikacji rails4 można użyć metody change również do usuwania kolumn. Trzeci param to data_type i w opcjonalnym forth możesz podać opcje. Jest ona nieco ukryta w sekcji "Dostępne transformacje" na dokumentacji .

class RemoveFieldFromTableName < ActiveRecord::Migration
  def change
    remove_column :table_name, :field_name, :data_type, {}
  end
end
 32
Author: Lars Schirrmeister,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-09 21:30:09

Są dwa dobre sposoby, aby to zrobić:

Remove_column

Możesz po prostu użyć remove_column, w następujący sposób:

remove_column :users, :first_name

Jest to w porządku, jeśli tylko trzeba dokonać jednej zmiany w schemacie.

Change_table block

Można to również zrobić za pomocą bloku change_table, w ten sposób:

change_table :users do |t|
  t.remove :first_name
end

Wolę to, ponieważ uważam, że jest bardziej czytelne, i można wprowadzić kilka zmian na raz.

Oto pełna lista obsługiwanych change_table metody:

Http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table

 21
Author: superluminary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-28 08:35:42

W rails 5 możesz użyć tego polecenia w terminalu:

rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE

Na przykład, aby usunąć kolumnę access_level (string) z użytkowników tabeli:

rails generate migration remove_access_level_from_users access_level:string

A następnie uruchom:

rake db:migrate
 11
Author: aschmid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-24 09:11:40
rails g migration RemoveXColumnFromY column_name:data_type

X = nazwa kolumny
Y = nazwa tabeli

EDIT

Zmieniono RemoveXColumnToY na RemoveXColumnFromY zgodnie z komentarzami-zapewnia większą jasność co do tego, co faktycznie robi migracja.

 10
Author: eden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-13 11:01:03

Usuń kolumny dla aplikacji RAILS 5

rails g migration Remove<Anything>From<TableName> [columnName:type]

Powyższe polecenie generuje plik migracji w katalogu db/migrate. Snippet blow jest jednym z przykładów remove column z tabeli generowanych przez Generator Rails,

class RemoveAgeFromUsers < ActiveRecord::Migration
  def up
    remove_column :users, :age
  end
  def down
    add_column :users, :age, :integer
  end
end

Zrobiłem również krótki przewodnik po szynach, który można znaleźć na tutaj .

 9
Author: Xinyang Li,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-17 08:36:59
remove_column :table_name, :column_name

(od lekarzy.)

 7
Author: Jordan Running,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-01 01:59:07

Aby usunąć kolumnę z tabeli należy wykonać migrację:

rails g migration remove_column_name_from_table_name column_name:data_type

Następnie uruchom polecenie:

rake db:migrate
 7
Author: Koresol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-02 09:06:50

Podaj poniżej komendę, którą sam doda do pliku migracji

rails g migration RemoveColumnFromModel

Po uruchomieniu powyższego polecenia możesz sprawdzić migrację pliku remove_column kod musi być tam dodany samodzielnie

Następnie migruj db

rake db:migrate
 5
Author: prash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-12 03:06:53

Do usunięcia kolumny z tabeli w zaledwie 3 prostych krokach w następujący sposób:

  1. zapisz to polecenie

rails g migration remove_column_from_table_name

Po uruchomieniu tego polecenia w terminalu jeden plik utworzony przez tę nazwę i znacznik czasu (remove_column from_table_name).

Następnie przejdź do tego pliku.

  1. Wewnątrz pliku musisz napisać

    remove_column :table_name, :column_name

  2. W końcu przejdź do konsoli, a następnie zrób

    rake db:migrate

 5
Author: Karan Bamniya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-06 10:48:09

remove_column Metoda in change pomoże Ci usunąć kolumnę z tabeli.

class RemoveColumn < ActiveRecord::Migration
  def change
    remove_column :table_name, :column_name, :data_type
  end
end

Przejdź na ten link, aby uzyskać pełne odniesienie: http://guides.rubyonrails.org/active_record_migrations.html

 4
Author: Dharmesh Rupani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-18 00:37:29

Wygeneruj migrację, aby usunąć kolumnę tak, że jeśli jest ona migrowana (rake db:migrate), powinna opuścić kolumnę . I powinien dodać kolumnę wstecz , Jeśli ta migracja jest rollbacked (rake db:rollback).

Składnia:

Remove_column :table_name,: column_name

Usuwa kolumnę, ale nie dodaje kolumny po wycofaniu.

Przykład:

remove_column :users, :last_name

Zwróć uwagę na nazwę tabeli liczby mnogiej: users

The składnia:

Remove_column :table_name,: column_name,: type

Usuwa kolumnę, również dodaje kolumnę z powrotem jeśli migracja jest rollbacked.

Przykład:

remove_column :users, :last_name, :string
Szczęśliwego kodowania!
 4
Author: Imran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-13 05:42:22

Przez
remove_column :table_name, :column_name
w pliku migracji

Możesz usunąć kolumnę bezpośrednio w konsoli rails wpisując:
ActiveRecord::Base.remove_column :table_name, :column_name

 0
Author: Manh Cuong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-06 18:08:07

Zrób tak;

rails g migration RemoveColumnNameFromTables column_name:type

Tzn. rails g migration RemoveTitleFromPosts title:string

W każdym razie lepiej byłoby rozważyć przestój, ponieważ ActiveRecord buforuje kolumny bazy danych w czasie wykonywania, Więc jeśli upuścisz kolumnę, może to spowodować wyjątki do czasu ponownego uruchomienia aplikacji.

Ref: silna migracja

 -1
Author: Nuttapon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-11 07:41:15