我正在为我正在编写的插件编写一个迁移生成器,我需要能够找到一个表的唯一索引,这样我就可以修改现有的唯一索引,使之成为一个复合唯一索引.我一直在试图找到一种方法,通过ActiveRecord访问表的索引.我只能找到ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::indexes方法,但不幸的是,这只适用于PosgreSQLAdapter.我需要能够支持其他主要数据库.

我首先将模式变灰.但我很快意识到,这是一个糟糕的rb文件索引策略.

我在想,如果ActiveRecord不能为多个数据库适配器提供这样做的方法,我可能可以编写特定于适配器的查询,从表中检索索引信息.如果我需要使用这种方法,什么是确定正在使用的适配器的好方法?

如果有人知道一种让ActiveRecord列出表索引信息的方法,那将是理想的.

推荐答案

这适用于MySQL、SQLite3和Postgres:

ActiveRecord::Base.connection.tables.each do |table|
    puts ActiveRecord::Base.connection.indexes(table).inspect
end

但我认为它只提供你专门创建的索引.

此外,要了解正在使用的适配器,请执行以下操作:

ActiveRecord::Base.connection.class

Ruby-on-rails相关问答推荐

Rails 7.1中的覆盖脚手架控制器

如何修改使用Google Cloud App Engine部署rails 7应用程序的步骤

Trailblazor 操作 -> 集合 :attribute(has_many 通过关联) 与填充器 -> 如何填充 Reform::Form 形式的 slugs 数组?

如何让删除链接响应 Rails 7 中的 turbo_stream 和 html?

这种使用on:的语法在 Ruby on Rails 中意味着什么?

Rails 7:加载所有刺激控制器

Selenium chromedriver:无法从不可键入的键构造KeyEvent

GroupingError:错误:列必须出现在 GROUP BY 子句中或在聚合函数中使用

PostgreSQL 无间隙序列

在公共 Rails 应用程序中将敏感数据存储在哪里?

Ruby on Rails:在模型中验证还是在数据库中验证更好?

Rails 5:无法从参数中检索哈希值

Django 还是 Ruby-On-Rails?

Rails Rake 任务 - 访问模型类

我如何在具有活动记录的 Rails 中使用两个不同的数据库?

强参数需要多个

在 rails 3 中批量插入

在范围内传递参数

rbenv:没有 gemsets 生存

在创建控制器和模型之后(仅)创建 Ruby on Rails 视图