假設我做了Image.column_names並且顯示了所有的列,比如post_id ,但是如何檢查post_id是否有索引呢?如何通過導軌控制檯檢查列上是否存在索引?
12
A
回答
17
在ActiveRecord「連接適配器」類之一上有一個index_exists?方法。
您可以使用它像這樣:
Image.connection.index_exists? :images, :post_id
1
以下爲我工作:
ActiveRecord::Base.connection.index_exists?(:table_name, :column_name)
4
正如其他人所說,你可以使用以下方法來檢查,如果該列存在索引:
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
不返回自動Rails爲ID的指數,這也解釋了爲什麼有些人以上都不必index_exists?(:table_name, :id)
相關問題
- 1. 導軌 - 通過控制檯
- 2. 檢查控制檯是否存在
- 3. 如何檢查軌道控制器中是否存在參數?
- 4. 導軌控制檯是否動態?
- 5. 我如何檢查,觀察員們在導軌使控制檯
- 6. 滑軌檢查是否在控制器
- 7. 如何通過capistrano在生產中輸入導軌控制檯?
- 8. Rails檢查控制器索引是否存在
- 9. 通過導軌控制檯保存文本文件
- 10. 如何檢查列表索引是否存在或不
- 11. 如何檢查熊貓DataFrame條目是否存在(索引,列)
- 12. 如何通過導軌控制檯創建Authlogic用戶?
- 13. 如何通過導軌控制檯創建Neo4j關係?
- 14. 檢查表列上是否存在非聚簇索引
- 15. 如何在通過導軌控制器檢索的瀏覽器中呈現PDF
- 16. 在控制檯上打印(導軌s)
- 17. 通過Hector檢查Cassandra中是否存在動態列的二級索引
- 18. 檢查數組索引是否存在
- 19. RavenDb檢查索引是否存在
- 20. 檢查矩陣索引是否存在
- 21. 檢查WebSQL中是否存在索引
- 22. 檢查導軌數組中是否存在特定列
- 23. 如何在非導軌項目中使用導軌控制檯?
- 24. 檢查控制檯是否有空白
- 25. 從控制檯查看導軌測試
- 26. 軌通過引導
- 27. 如何在導軌控制檯中查找數據庫名稱
- 28. 如何通過索引檢查數組
- 29. 檢查控制是否在屏幕上
- 30. 使用導軌控制檯
即使在':id'屬性的情況下,它總是返回'false'。我做了什麼錯誤的'Referral.connection.index_exists? :引薦,:ID'? – kamal 2016-08-17 10:45:57
@kamal'index_exists?'檢查列上是否存在任何索引。不知道如何檢查,但對我而言,它有時也會返回錯誤。還有[index_name_exists?](http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-index_name_exists-3F)通過名稱檢查索引,它對於自定義索引很有效 – ololobus 2016-08-25 11:35:02
@ ololobus但是這個方法'index_name_exist?'需要通過索引名來知道,這很難知道,因爲你甚至不知道索引是否有索引,或者你實際上正在尋找索引。 – kamal 2016-08-26 12:01:00