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


148

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


2
那就是脚本/ dbconsole的用途
hgmnz 2010年

是的,这会使您陷入mysql(或其他任何原因)中。出于一些奇怪的原因,我想从常规控制台中列出列/表等。我认为这可能需要定制的红宝石方法才能做到这一点。
rtfminc

Answers:


305

您可能正在寻找:

ActiveRecord::Base.connection.tables

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

您可能应该将它们包装成较短的语法.irbrc


3
谢谢,第一个像我想要的那样工作。但是第二个却没有-寻找类似但没有运气的东西。
rtfminc

12
ActiveRecord :: Base.connection.columns(“ foos”)也应该起作用,但是它返回列对象.map {| c | 最后使用[c.name,c.type]}可以解决此问题。
cwninja

27
table_structure似乎特定于sqlite适配器。
开尔文

4
对于Rails4,请使用Model.column_names列出表列
Stephen Provis

4
同样在Rails 4中,您可以仅使用ModelName来获取列及其数据类型的列表。
themattkellyshow '16

20

我希望我的较晚回答可以有所帮助。
这将转到Rails数据库控制台。

rails db

漂亮打印您的查询输出

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

显示表格

.table

“ .help”以查看帮助。
或使用“从汽车中选择*”之类的SQL语句


7
'rails dbconsole'将您置于正在使用的任何数据库引擎的命令行解释器(CLI)中...以上是SQLite命令...例如,Postgres将使用'\ dt'列出表...
Tom Hundt

有没有一种方法可以确保您在运行rails db时不必每次都在.header和.more列上应用
Mark

7

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

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

1
另外:ActiveRecord::Base.descendants.map(&:name)
德沃克

4

您可以rails dbconsole用来查看Rails应用程序正在使用的数据库。这是另一种答案rails db。这两个命令都将指导您使用命令行界面,并允许您使用该数据库查询语法。


0

运行这个:

Rails.application.eager_load! 

然后

ActiveRecord::Base.descendants

返回模型/表的列表


-3

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

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

看更多...


3
通过这样做,您只列出了模型文件,如果表存在于db中,并且模型目录中没有模型过滤器,那该怎么办!
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.