Миграция рельсов для столбца изменения



у нас есть script/generate migration add_fieldname_to_tablename fieldname:datatype синтаксис для добавления новых столбцов в модели.



в той же строке есть ли у нас скрипт/generate для изменения типа данных столбца? Или я должен написать SQL непосредственно в моей миграции ванили?



Я хочу изменить столбец из datetime to date.

511   7  

7 ответов:

Я думаю, что это должно работать.

change_column :table_name, :column_name, :date

вы также можете использовать блок, если у вас есть несколько столбцов, чтобы изменить в таблице.

пример:

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 папка и редактировать файл миграции, который вы сделали. Есть два разных решения.

  1. 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

Шаг 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

    Ничего не найдено.