Миграция рельсов для столбца изменения
у нас есть script/generate migration add_fieldname_to_tablename fieldname:datatype синтаксис для добавления новых столбцов в модели.
в той же строке есть ли у нас скрипт/generate для изменения типа данных столбца? Или я должен написать SQL непосредственно в моей миграции ванили?
Я хочу изменить столбец из datetime to date.
7 ответов:
вы также можете использовать блок, если у вас есть несколько столбцов, чтобы изменить в таблице.
пример:
change_table :table_name do |t| t.change :column_name, :column_type, {options} endпосмотреть документация API по классу таблицы для более подробной информации.
Я не знаю, можно ли создать миграцию из командной строки, чтобы сделать все это, но вы можете создать новую миграцию, а затем отредактировать миграцию для выполнения этого такса.
Если tablename-это имя вашей таблицы, fieldname-это имя вашего поля, и вы хотите изменить его с даты на дату, вы можете написать миграцию для этого.
вы можете создать новую миграцию с помощью:
rails g migration change_data_type_for_fieldnameзатем измените миграцию для использования 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затем запустите миграцию:
rake db:migrate
как я обнаружил по предыдущим ответам, для изменения типа столбца необходимы три шага:
Шаг 1:
создайте новый файл миграции с помощью этого кода:
rails g migration sample_name_change_column_typeШаг 2:
на
/db/migrateпапка и редактировать файл миграции, который вы сделали. Есть два разных решения.
def change change_column(:table_name, :column_name, :new_type) end2.
def up change_column :table_name, :column_name, :new_type end def down change_column :table_name, :column_name, :old_type endШаг 3:
не забудьте сделать это команда:
rake db:migrateя протестировал это решение для Rails 4, и оно хорошо работает.
просто создайте миграцию:
rails g migration change_column_to_new_from_table_nameобновить миграцию следующим образом:
class ClassName < ActiveRecord::Migration change_table :table_name do |t| t.change :column_name, :data_type end endи наконец
rake db:migrate
С Рельсами 5
если вы хотите, чтобы миграция сделала что-то, что Active Record не знает, как отменить, вы можете использовать
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
другой способ, чтобы изменить тип данных с помощью миграции
Шаг 1: Вам нужно удалить имя поля типа данных faulted с помощью миграции
ex:
rails g migration RemoveFieldNameFromTableName field_name:data_typeздесь не забудьте указать тип данных для поля
Шаг 2: Теперь вы можете добавить поле с правильным типом данных
ex:
rails g migration AddFieldNameToTableName field_name:data_typeвот и все, теперь ваша таблица будет добавлена с правильное поле типа данных, счастливое рубиновое кодирование!!
Comments