Я занимаюсь ремонтом существующего сайта Rails, и у меня возникают проблемы, связанные со многими ассоциациями. Похоже, что сайт был изначально построен с использованием has_and_belongs_to_many
для нескольких отношений, которые с тех пор усложнились в бизнес-логике, поэтому мне нужно использовать has_many :through
вместо этого, чтобы поддерживать дополнительные поля в таблице отношений. Тем не менее, таблица соединений, которая изначально использовалась для HABTM, не имеет первичного ключа, и я должен добавить ее для поддержки отдельного моделирования отношений, используя has_many :through
.Моделирование рельсов: преобразование HABTM в has_many: через
Каков наилучший способ добавления первичного ключа в существующую таблицу с большим количеством данных? Есть ли другой способ сделать то, что я пытаюсь сделать?
Кстати, система работает на Oracle.
Спасибо!
Джастин
UPDATE 11/9/09 3:58 вечер: Я не эксперт Oracle и был затеряться в дебрях версий Oracle, в не нулевом, автоприращении, и так далее. Первоначально я пытался сделать то, что рекомендовал Майк и Кори, добавив новое поле в качестве первичного ключа, но Oracle не позволит мне добавить ненулевое поле в непустую таблицу (ORA-01758). Затем я экспортировал данные как SQL, сбросил строки, добавил PK и установил, что он не является нулевым, а затем попытался импортировать данные, но я продолжал получать ошибки до мелодии «не могу вставить NULL в id ...» (ОР-01400).
Наконец, я попытался использовать миграцию, как предлагает Кори в своем комментарии, но rake ударил те же ошибки, что и Oracle, когда я изменил базу данных вручную («не могу добавить ненулевое поле в непустую таблицу»). Я очистил таблицу, выполнил миграцию (которая работала), а затем попыталась повторно импортировать данные, но в то же время у меня были те же ошибки, что и в прошлый раз, когда я пытался импортировать («не могу вставить NULL в id ...»). Как сохранить мои данные и добавить необходимые мне первичные ключи? Я знаю, что была предложена возможность написания рейк-задачи, но я не уверен, как действовать на этом фронте. Есть идеи?
См. Также последние вопросы и ответы: http://stackoverflow.com/questions/16159134/how-to-migrate-has-and-belongs-to-many-to-has-many-through/29067732# 29067732 – MZB