Я пишу генератор миграции для плагина, который я пишу, и мне нужно найти, какие уникальные индексы имеют таблица, поэтому я могу изменить существующие уникальные индексы, чтобы стать составным уникальным индексом. Я пытался найти способ получить доступ к индексам таблицы с помощью ActiveRecord. Я только смог найти метод ActiveRecord :: ConnectionAdapters :: PostgreSQLAdapter :: indexes, но, к сожалению, это доступно только для PosgreSQLAdapter. Мне нужно иметь возможность поддерживать другие основные базы данных.ActiveRecord нахождение существующих табличных индексов
Сначала я нашел файл schema.rb, чтобы найти индексы, это сработало сначала, но я скоро понял, что это была плохая стратегия.
Я думал, что если ActiveRecord не предоставляет средства для этого для нескольких адаптеров баз данных, я могу написать конкретные запросы адаптера для извлечения информации индекса из таблицы. Если мне нужно прибегнуть к этому методу, что было бы хорошим способом определить используемый адаптер?
Если кто-то знает способ получить ActiveRecord для отображения информации индекса таблицы, которая была бы идеальной.
Единственный способ, которым я могу думать, чтобы сделать это прямо сейчас с помощью ActiveRecord :: SchemaDumper.dump Проблема заключается в том, что это выводит текущую схему на $ стандартный вывод, и я не знаю, как захватить, что и преобразовать вывод в строку. Если бы я знал это, я смог бы использовать код из своего первого подхода к чтению schema.rb. Кто-нибудь знает, как записать $ stdout для того, что было написано в блоке? Например, это не работает: schema_str = IO :: open (2) {ActiveRecord :: SchemaDumper.dump} .read –
Я понимаю, что этот вопрос древний, но у меня была такая же проблема, что и попытка заставить SchemaDumper сбрасывать строка. Я, наконец, нашел ответ, и я отправлю его, если у кого-то еще будет эта проблема: 'schema_rb_as_string = ActiveRecord :: SchemaDumper.dump (ActiveRecord :: Base.connection, StringIO.new) .string' – MothOnMars