Предположим, что у меня есть Image.column_names, и это показывает все столбцы, такие как post_id , но как проверить, имеет ли post_id индекс на нем?Как проверить, есть ли указатель на столбце через консоль рельсов?
ответ
На одном из адаптеров адаптеров ActiveRecord есть метод index_exists?.
Вы можете использовать его как это:
Image.connection.index_exists? :images, :post_id
Следующие работал для меня:
ActiveRecord::Base.connection.index_exists?(:table_name, :column_name)
Как уже упоминалось, вы можете использовать следующую команду для проверки, если индекс столбца существует :
ActiveRecord::Base.connection.index_exists?(:table_name, :column_name)
Следует, однако, отметить, что это возвращает только true, если существует индекс, который содержит индексы этот столбец и только этот столбец. Он не будет возвращать true, если вы используете составные индексы, которые включают ваш столбец. Вы можете увидеть все индексы для таблицы с
ActiveRecord::Base.connection.indexes(:table_name)
Если вы посмотрите на исходный код для index_exists?
, вы увидите, что внутренне он использует indexes
, чтобы выяснить, существует ли или не ваш индекс. Поэтому, если, как и я, их логика не подходит для вашего варианта использования, вы можете прокрутить эти индексы и посмотреть, будет ли один из них работать. В моем случае, логика была таким образом:
ActiveRecord::Base.connection.indexes(:table_name).select { |i| i.columns.first == column_name.to_s}.any?
Важен также отметить, indexes
не возвращает индекс, который рельсы автоматически генерирует для идентификаторов, что объясняет, почему некоторые люди выше, были проблемы с вызовами index_exists?(:table_name, :id)
- 1. Как протестировать метод рельсов через консоль рельсов
- 2. Как создать пользователя Authlogic через консоль рельсов?
- 3. Есть ли консоль для весеннего ботинка, как для рельсов?
- 4. Как войти в консоль рельсов на производство через capistrano?
- 5. Как проверить, указывает ли указатель на NULL?
- 6. Есть ли указатель на направление?
- 7. рельсов консоль получить все
- 8. После Segfault: Есть ли способ проверить, сохраняется ли указатель?
- 9. Как вставить китайские символы в консоль рельсов?
- 10. Консоль: как проверить, доступен ли протокол
- 11. Есть ли способ распечатать ссылку на консоль?
- 12. как проверить, существует ли ассоциация рельсов
- 13. Есть ли рекомендуемый способ проверить, является ли смарт-указатель нулевым?
- 14. Есть ли способ проверить, остается ли QObject-указатель в Qt?
- 15. Есть ли консоль Firebug -vsdoc.js?
- 16. Как проверить, загружен ли сеанс рельсов?
- 17. Есть ли интерактивная консоль ABAP?
- 18. Есть ли консоль REPL для Swift?
- 19. Есть ли консоль Gatling2 REPL?
- 20. C проверить, действителен ли указатель?
- 21. Проверить, есть ли в столбце массив, который соответствует переменной
- 22. Как проверить, отображается ли указатель мыши?
- 23. Как использовать консоль рельсов в проекте без рельсов?
- 24. не может загрузить консоль рельсов
- 25. Тестирование вывода на консоль C++ через TDD
- 26. Как проверить, существует ли запись в столбце?
- 27. не удалось запустить консоль рельсов
- 28. Как проверить, доступна ли ссылка в столбце
- 29. Есть ли способ сделать указатель на ссылку?
- 30. Может ли указатель на указатель на указатель?
Он всегда возвращает 'false' даже в случае атрибута': id'. Я что-то делаю неправильно? Referral.connection.index_exists? : рефералы,: id'? – kamal
@kamal 'index_exists?' Проверяет, что любой индекс существует в столбце. Не знаю, как это проверяется, но для меня это также иногда возвращает false. Существует также [index_name_exists?] (Http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-index_name_exists-3F), чтобы проверить индекс по имени, он хорошо работает для пользовательских индексов – ololobus
@ ololobus, но этот метод 'index_name_exist?' требует знать по имени индекса, что трудно понять, потому что вы даже не знаете, есть ли индекс или нет или для которого вы действительно ищете. – kamal