Rails:如何使用 Rails 控制台列出数据库表/对象?

Posted

技术标签:

【中文标题】Rails:如何使用 Rails 控制台列出数据库表/对象?【英文标题】:Rails: How to list database tables/objects using the Rails console? 【发布时间】:2011-01-07 01:47:56 【问题描述】:

我想知道您是否可以在 Rails 控制台中列出/检查哪些数据库/对象可供您使用。我知道您可以使用其他工具看到它们,我只是好奇。 谢谢。

【问题讨论】:

这就是 script/dbconsole 的用途 是的,这会让你进入 mysql(或其他)。出于某种奇怪的原因,我想从常规控制台中列出列/表等。我在想它可能需要定制的 ruby​​ 方法来做这样的事情。 【参考方案1】:

您可能正在寻找:

ActiveRecord::Base.connection.tables

ActiveRecord::Base.connection.columns('projects').map(&:name)

您可能应该在 .irbrc 中用较短的语法将它们包装起来。

【讨论】:

谢谢,第一个工作如我所愿。但是第二个没有 - 寻找类似的东西但没有运气。 ActiveRecord::Base.connection.columns("foos") 也应该工作,但它返回列对象,.map|c| [c.name, c.type] 最后解决了这个问题。 table_structure 似乎是特定于 sqlite 适配器的。 对于 Rails4 使用 Model.column_names 列出表列 同样在 Rails 4 中,您可以只使用 ModelName 来获取列及其数据类型的列表。【参考方案2】:

运行这个:

Rails.application.eager_load! 

然后

ActiveRecord::Base.descendants

返回模型/表格列表

【讨论】:

【参考方案3】:

您可以使用rails dbconsole 查看您的rails 应用程序正在使用的数据库。这是替代答案rails db。这两个命令都将引导您进入命令行界面,并允许您使用该数据库查询语法。

【讨论】:

【参考方案4】:

希望我迟来的回答能对你有所帮助。 这将转到 rails 数据库控制台。

rails db

漂亮地打印你的查询输出

.headers on
.mode columns
(turn headers on and show database data in column mode )

显示表格

.table

'.help' 查看帮助。 或者使用 SQL 语句,例如“从汽车中选择 *”

【讨论】:

'rails dbconsole' 将您置于您正在使用的任何数据库引擎的命令行解释器 (CLI) 中……以上是 SQLite 命令……例如,Postgres 将使用 '\ dt' 列出表格... 有没有办法确保每次运行 rails db 时不必在 .headers 和 .more 列上应用 TIL。 12 年后,不知道rails db 是一回事。 lul【参考方案5】:

它是一个开始,它可以列出:

models = Dir.new("#RAILS_ROOT/app/models").entries

再看看……

【讨论】:

通过这样做,您只需列出模型文件,如果表存在于 db 中并且模型目录中没有模型文件,该怎么办!【参考方案6】:

要获取所有模型类的列表,您可以使用ActiveRecord::Base.subclasses 例如

ActiveRecord::Base.subclasses.map  |cl| cl.name 
ActiveRecord::Base.subclasses.find  |cl| cl.name == "Foo" 

【讨论】:

还有:ActiveRecord::Base.descendants.map(&:name)

以上是关于Rails:如何使用 Rails 控制台列出数据库表/对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用rails仅列出从数据库中特定日期到现在的年份?

Rails如何不通过控制器提供文件下载?

Rails:如何访问 RESTful 助手?

从控制台获取 rails 关联

如何仅列出属于我的 Rails 应用程序的 Rake 任务(没有不可维护的 grep 语句)?

如何列出 Rails 3 应用程序中所有定义的环境?