миграция рельсов удалить ключи и добавить данные в идентификатор столбца с автоинкрементом

У меня есть php-приложение со структурой таблицы ниже

CREATE TABLE IF NOT EXISTS `artist_has_fans` (
`artist_id` int(11) NOT NULL,
`fan_id` int(11) NOT NULL,
 PRIMARY KEY (`artist_id`,`fan_id`),
 KEY `fk_artist_has_artist_artist2` (`fan_id`),
 KEY `fk_artist_has_artist_artist1` (`artist_id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Мне нужно написать миграцию в рельсах, чтобы таблица имела идентификатор первичного ключа с автоинкрементом. Во-вторых, поскольку в таблице уже есть некоторые данные, мне нужно вставить данные для столбца id. Затем мне нужно удалить первичный ключ из существующих столбцов.

Приветствуется любая помощь в написании миграции.


person pramodtech    schedule 26.04.2013    source источник


Ответы (1)


Глядя на вышеизложенное, это похоже на таблицу соединений. Планируете ли вы добавить к нему другие атрибуты или просто пытаетесь заставить его работать с Rails? вы можете просто использовать отношение has_and_belongs_to_many внутри рельсов, и вам не понадобится поле идентификатора.

Что-то вроде ниже должно работать без необходимости изменять вашу таблицу.

class Artist < ActiveRecord::Base
   ...
   has_and_belongs_to_many :fans, :join_table => 'artist_has_fans'

end 

но если вы хотите изменить таблицу, чтобы добавить первичный ключ в mysql

   def_up
      execute <<-SQL
       ALTER TABLE artist_has_fans ADD id INT PRIMARY KEY AUTO_INCREMENT;
      SQL
   end 

Это должно создать идентификатор и добавить значения для всех существующих строк.

person Doon    schedule 26.04.2013