Ruby on rails 如何从rails中的特定postgres数据库获取表名

Ruby on rails 如何从rails中的特定postgres数据库获取表名,ruby-on-rails,ruby,postgresql,Ruby On Rails,Ruby,Postgresql,我已经使用controller在数据库中创建了一个表,所以在单击按钮时,这个create_table controller操作将调用这个表,而我并没有使用这个模型 现在我想从一个特定的数据库中获取表名,我应该创建一个模型吗?或者怎么做 请帮助我,我是rails的新手,我搜索了很多,然后发布了这个问题,因为我没有得到满意的答案 这是我的控制器动作 def create_table require 'pg' begin con = PG.connect :dbn

我已经使用controller在数据库中创建了一个表,所以在单击按钮时,这个create_table controller操作将调用这个表,而我并没有使用这个模型

现在我想从一个特定的数据库中获取表名,我应该创建一个模型吗?或者怎么做

请帮助我,我是rails的新手,我搜索了很多,然后发布了这个问题,因为我没有得到满意的答案

这是我的控制器动作

def create_table    

    require 'pg'

    begin

    con = PG.connect :dbname => 'testdb', :user => 'abcd', :host => 'xyz'

    con.exec "DROP TABLE IF EXISTS Cars"
    con.exec "CREATE TABLE Cars(Id INTEGER PRIMARY KEY, 
        Name VARCHAR(20), Price INT)"

    rescue PG::Error => e

    puts e.message 

    ensure

    con.close if con

    end
end

如果您不熟悉
rails
,最好阅读一些指南(例如,从开始)。这将为您提供一个比手动操作数据库更好的开始。rails的一大优点(在rails之外工作时我最怀念的一个优点)是数据库迁移的概念(如中所述)

基本上,您将学习如何创建表作为创建模型的结果。您可以使用生成器创建一个新模型,或者作为初学者,您甚至可以选择使用整个
scaffold
generator,例如

rails generate scaffold HighScore game:string score:integer
这将生成
Model
类(派生自
ActiveRecord::Base
)、数据库迁移以创建
HighScore
表、用于操作它的
HighScoreController
对象以及一系列模板,这些模板为常规
CRUD
操作生成一组页面(即
创建
读取
更新
删除


通过某些用户操作动态创建表不是通常的
rails
方法,而是通过在开发环境中进行迁移来创建表。这将允许您在适当的时间将表迁移到生产环境中。这是一种与(实时)结构交互的更好方法我向您保证,使用DDL-SQL比使用数据库更方便。

如果您想从数据库中获取表名,而不使用ActiveRecord和模型,请使用SQL:

#for pg
tables = con.exec("SELECT table_name FROM information_schema.tables WHERE table_schema='public'").to_a

它会返回您创建的表列表。

不客气。在stackoverflow上最常见的说“谢谢”的方式是接受答案。(不用担心,如果有更好的结果,您随时可以改变主意。)我之所以使用上述方法,是因为我想在每次单击按钮时创建一个表,并在DB中创建该表,但现在我想知道我是否可以创建一个模型并获取表名?@PatruThere可能是一个删除该表并在按下按钮时重新创建它的原因,但从您提供的代码中看,这并不明显。通常,您希望在表中创建一行,以便下次有人出现时仍保留该行。每次单击时删除该表很可能会立即消除您网站的有用性,因此
rails
不适合您的用例。如果您希望得到任何好的答案,请解释您的推理。我想将表格从控制器传递到视图以在浏览器中显示所有表格名称。该怎么办?您可以在控制器操作中使用
@
定义变量,例如,
@tables
,它将作为
@table
在该操作视图中可用,以显示-
,您可以在《官方指南》中阅读有关rails视图的更多信息-