Migracja Rails do kolumny change
Mamy składnię script/generate migration add_fieldname_to_tablename fieldname:datatype
do dodawania nowych kolumn do modelu.
W tej samej linii, czy mamy skrypt / generate do zmiany typu danych kolumny? A może powinienem napisać SQL bezpośrednio do mojej migracji vanilla?
Chcę zmienić kolumnę z datetime
na date
.
7 answers
Myślę, że to powinno zadziałać.
change_column :table_name, :column_name, :date
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-07 05:53:28
Możesz również użyć bloku, jeśli masz wiele kolumn do zmiany w tabeli.
Przykład:
change_table :table_name do |t|
t.change :column_name, :column_type, {options}
end
Zobacz dokumentację API na klasie Table aby uzyskać więcej szczegółów.
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-03-30 08:40:25
Nie wiem, czy możesz utworzyć migrację z wiersza poleceń, aby to zrobić, ale możesz utworzyć nową migrację, a następnie edytować migrację, aby wykonać to taks.
Jeśli tablename jest nazwą Twojej tabeli, fieldname jest nazwą Twojego pola i chcesz zmienić czas z datetime na date, możesz napisać migrację w tym celu.
Możesz utworzyć nową migrację za pomocą:
rails g migration change_data_type_for_fieldname
Następnie Edytuj migrację, aby użyć change_table:
class ChangeDataTypeForFieldname < ActiveRecord::Migration
def self.up
change_table :tablename do |t|
t.change :fieldname, :date
end
end
def self.down
change_table :tablename do |t|
t.change :fieldname, :datetime
end
end
end
Następnie uruchom migracja:
rake db:migrate
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-01-11 20:20:17
Jak stwierdziłem w poprzednich odpowiedziach, potrzebne są trzy kroki, aby zmienić typ kolumny:
Krok 1:
Wygeneruj nowy plik migracji używając tego kodu:
rails g migration sample_name_change_column_type
Krok 2:
Przejdź do folderu /db/migrate
i edytuj utworzony plik migracji. Istnieją dwa różne rozwiązania.
def change change_column(:table_name, :column_name, :new_type) end
2.
def up
change_column :table_name, :column_name, :new_type
end
def down
change_column :table_name, :column_name, :old_type
end
Krok 3:
Nie zapomnij wykonać tego polecenia:
rake db:migrate
Testowałem to rozwiązanie dla Rails 4 i działa cóż.
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-07 05:41:21
Wystarczy wygenerować migrację:
rails g migration change_column_to_new_from_table_name
Zaktualizuj migrację tak:
class ClassName < ActiveRecord::Migration
change_table :table_name do |t|
t.change :column_name, :data_type
end
end
I wreszcie
rake db:migrate
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-02 16:16:42
Z Szynami 5
Z Prowadnice Szyn :
Jeśli chcesz, aby migracja zrobiła coś, czego Active Record nie wie, jak odwrócić, możesz użyć
reversible
:
class ChangeTablenameFieldname < ActiveRecord::Migration[5.1]
def change
reversible do |dir|
change_table :tablename do |t|
dir.up { t.change :fieldname, :date }
dir.down { t.change :fieldname, :datetime }
end
end
end
end
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-05-10 18:12:16
Inny sposób zmiany typu danych przy użyciu migracji
Krok 1: Należy usunąć nazwę pola faulowanego typu danych za pomocą migracji
Ex:
rails g migration RemoveFieldNameFromTableName field_name:data_type
Tutaj nie zapomnij podać typu danych dla Twojego pola
Krok 2: Teraz możesz dodać pole z prawidłowym typem danych
Ex:
rails g migration AddFieldNameToTableName field_name:data_type
To wszystko, teraz twoja tabela zostanie dodana z prawidłowym polem typu danych, Szczęśliwego kodowania ruby!!
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-11-10 12:32:45