Первичный ключ не разрешен в таблице соединений has_and_belongs_to_many - PullRequest
3 голосов
/ 17 января 2012

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

В качестве первого шага по очистке отношений я хотел поместить уникальный индекс в одно из полей.

Теперь я 'получаю следующую ошибку:

Первичный ключ не разрешен в таблице соединений has_and_belongs_to_many (datacenters_projects).

Я использую Rails 2.3.8, работающий на ruby ​​1.8.7p174 и mysql Ver 14.12Distrib 5.0.77.

Это не первичный ключ, это просто уникальный индекс.Я предполагаю, что это ключ-кандидат, но я не решил, что это первичный ключ.

Я не знаю, почему mysql считает его первичным ключом.Я не знаю, почему ActiveRecord возражает против таблицы ссылок в has_and_belongs_to_many, имеющей первичный ключ.

Но мой реальный вопрос: «Есть ли способ, которым я могу поместить уникальный индекс в одно из полей,без ActiveRecord, выдающего мне ошибку? "

Можно ли как-то сказать add_index, что это не первичный ключ?

Ответы [ 2 ]

1 голос
/ 04 июня 2012

Я не уверен, почему это не получится.Вы должны быть в состоянии обойти это, используя SQL в своей миграции, например:

ActiveRecord::Base.connection.execute("CREATE UNIQUE INDEX project_id_index ON datacenters_projects (project_id)")
0 голосов
/ 04 июня 2012

Переключиться на

has_many :through => ...

Ссылка: направляющие

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...