2013-09-19 3 views
28

Я узнал, что add_column имеет опцию :after, чтобы установить, где вставлен столбец. Жаль, что я узнал об этом: после добавления группы.Rails 4 migration: как изменить порядок столбцов

Как написать миграцию, чтобы просто переупорядочить столбцы?

+0

Вы можете сбросить базу данных, чтобы сохранить данные; переупорядочите Schema.rb, чтобы поместить столбцы timestamps в конец блока create_table; запустите 'rake db: drop db: create db: migrate', а затем повторно импортируйте свои данные. – MrYoshiji

+0

Теперь это недокументированная функция: [Вы должны прочитать основные источники] (https://github.com/rails/rails/blob /7860bf11d862a6eb1bd9ada85bcd97f17a2cb536/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L278), чтобы найти его. Только для справки, я проверил код rename_column: он не предлагает эту функцию (извините, что это не помогает). –

+1

Используйте SQL в миграции. http://stackoverflow.com/questions/4095481/easy-way-to-re-order-columns – Zabba

ответ

45

Вы можете позвонить change_column, но вы должны повторять тип столбца (просто скопировать и вставить его из другой миграции):

def up 
    change_column :your_table, :some_column, :integer, after: :other_column 
end 

Или если у вас есть, чтобы изменить порядок несколько столбцов в одной таблице:

def up 
    change_table :your_table do |t| 
    t.change :some_column, :integer, after: :other_column 
    # ... 
    end 
end 

change_column звонки ALTER TABLE под капотом. С MySQL documentation:

Вы также можете использовать FIRST и AFTER в CHANGE или MODIFY операций изменения порядка столбцов в таблице.

+0

Хороший улов. Я не знал, что это можно сделать через ALTER TABLE. –

+0

@OlivierElMekki Я добавил ссылку на документацию по MySQL – Stefan

+0

@Stefan Могу ли я избежать использования 'def change' вместо' up' и 'down'? – emersonthis

-1

Решение Stefan идеально подходит, если вы имеете дело с несколькими колоннами. Если у вас есть несколько столбцов, которые нужно переустановить И оказались на Mac, я предлагаю вам взглянуть на Sequel Pro, отличный инструмент управления базами данных, который упрощает переупорядочивание столбцов базы данных. Просто перетащите.

PS: Я ни с кем не связан с ними.

+0

В прошлый раз, когда я проверил, Sequel Pro не поддерживает postgres. –

+0

Наверное, лучше всего делать все изменения таблицы в системе, которая их отслеживает ... например, миграции рельсов. –

Смежные вопросы