2013-12-10 20 views
0

У меня есть приложение rails, которое работает в разных базах данных, зависит от настроек клиента. У меня есть таблица «catalog_item_specifications», которая имеет столбец «bec_id». Тип столбца - строка. Теперь я хочу изменить тип столбца на целое. Когда я пишу:Rails Change Column Type Migration для MySQL и Postgres

change_column :catalog_item_specifications, :bec_id, :integer 

Он отлично работает на MySQL, но не смог выполнить postgres. Так, согласно этому сообщению: Rails - gmaps4rails gem on postgres я изменил свою миграцию на следующее:

connection.execute(%q{ 
    alter table catalog_item_specifications 
    alter column bec_id 
    type integer using bec_id::integer 
}) 

Теперь работать на Postgres, но не на MySQL. Мне нужно решение (без сброса и повторного добавления), которое будет работать для обоих.

ответ

1

Это один из тех случаев, когда вам может быть лучше всего проверить, какой механизм базы данных запущен, а затем использовать команду, которая работает для этого движка.

Что-то вроде этого:

if connection.adapter_name.downcase == 'postgresql' 
    connection.execute(%q{ 
    alter table catalog_item_specifications 
    alter column bec_id 
    type integer using bec_id::integer 
    }) 
else 
    change_column :catalog_item_specifications, :bec_id, :integer 
end 

Где 'postgresql' является adapter_name (вы должны проверить, чтобы увидеть, что это на самом деле, когда вы переходите на Postgres).

+0

Я на самом деле в конечном итоге с этим решением, чем видел тот же ответ здесь. Приятно знать, что я на правильном пути! –