Как получить имя столбца для primary_key на уровне базы данных? - PullRequest
0 голосов
/ 14 мая 2019

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

Model.primary_key возвращает models_id имя столбца, которое не первичный ключ на уровне базы данных. Я не могу изменить миграцию или изменить таблицы в любом случае.

В настоящее время я могу получить его через MySqlAdapter с ActiveRecord::Base.connection.primary_key('table_name')

но это не работает с таблицами, которые имеют составные первичные ключи. Если таблица содержит составной первичный ключ, она возвращает nil.

Можно ли как-нибудь достичь этого программно?

Ответы [ 2 ]

2 голосов
/ 14 мая 2019

ActiveRecord не поддерживает составные первичные ключи из коробки.

Вам потребуется установить гем композитный_применный_кейс , а затем ActiveRecord::Base.connection.primary_key('table_name') вернет массив имен столбцов, если первичный ключ является составным.

0 голосов
/ 14 мая 2019
  1. Выполните запрос:

    SHOW COLUMNS FROM table_name;
    

Затем посмотрите все строки, возвращенные, где столбцы с именем KEY имеют значение PRI '.Тогда столбец Поле даст вам имя столбца в вашей таблице, которое является частью первичного ключа таблицы.

В качестве альтернативы:

SELECT COLUMN_NAME FROM information_schema
WHERE TABLE_SCHEMA='database_name'
      AND TABLE_NAME = 'table_name'
      AND COLUMN_KEY = 'PRI';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...