Rails控制台抛出ActiveRecord :: Base.connection.table_structure(“”)的错误

时间:2016-11-15 13:49:09

标签: ruby-on-rails activerecord

我试图通过以下命令访问表结构:

ActiveRecord::Base.connection.table_structure("projects")

控制台抛出以下错误:

  

NoMethodError:受保护的方法`table_structure'调用#< ActiveRecord的:: ConnectionAdapters :: SQLite3Adapter:0x6559050>

我想知道Rails控制台是如何工作的,这个错误背后的原因是什么?有没有办法通过Rails控制台访问表结构,而不是经常切换到Sqlite3来检查架构?

2 个答案:

答案 0 :(得分:2)

要调用您想要的方法,请执行以下操作:

Project.columns_hash

但我认为更好的选择是使用columns_hash获取有关表结构的最详细信息:

  

获取表的列作为哈希,键是列名值   列对象。

id

用法:说,您想获取有关Project.columns_hash['id'] #=> #<ActiveRecord::ConnectionAdapters::PostgreSQLColumn:0x007fda9e48ce90 # @array=false, # @cast_type=#<ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer:0x007fda9bda2e88 @limit=nil, @precision=nil, @range=-2147483648...2147483648, @scale=nil>, # @default=nil, # @default_function="nextval('users_id_seq'::regclass)", # @name="id", # @null=false, # @sql_type="integer"> 列的信息:

Project.columns
Project.column_names

还有columns

  

返回与此关联的表的列对象数组   类。

column_names

  

以字符串形式返回列名数组。

{{1}}

请参阅full list of methods in documentation

答案 1 :(得分:1)

只需输入型号名称

即可直接获取结构

在你的情况下

Project

这将返回如下内容:

class Project < ActiveRecord::Base {
          :id => :integer,
        :name => :string,
  :created_at => :datetime,
  :updated_at => :datetime
}