Ruby activerecord不返回列信息
我有一个非常简单的ruby脚本,其中不返回列名称。下面的代码返回正确的行计数10000。但是,对列名的请求返回一个空数组[]。我的gemfile.lock显示我正在使用activerecord 4.1.2.rc2 这是如此简单,但我无法确定我的问题Ruby activerecord不返回列信息,ruby,activerecord,sql-server-2008-r2,tiny-tds,Ruby,Activerecord,Sql Server 2008 R2,Tiny Tds,我有一个非常简单的ruby脚本,其中不返回列名称。下面的代码返回正确的行计数10000。但是,对列名的请求返回一个空数组[]。我的gemfile.lock显示我正在使用activerecord 4.1.2.rc2 这是如此简单,但我无法确定我的问题 require 'active_record' # v4.1.4 require 'activerecord-sqlserver-adapter' # v4.1.0 require 'pp' ActiveRecord::Base.plurali
require 'active_record' # v4.1.4
require 'activerecord-sqlserver-adapter' # v4.1.0
require 'pp'
ActiveRecord::Base.pluralize_table_names = false
ActiveRecord::Base.establish_connection(
adapter: 'sqlserver',
host: '--------',
database: '----',
timeout: 35
)
class Model < ActiveRecord::Base
self.table_name = 'table_name'
end
pp Model.count
pp Model.column_names
pp Model.attribute_names
收益率:
D, [2014-08-01T16:17:54.299270 #4072] DEBUG -- : [1m[36mSQL (1.0ms)[0m [1mUSE [MS_GMED_TRANSACTION_NEW][0m
D, [2014-08-01T16:17:54.320753 #4072] DEBUG -- : [1m[35mActivityDim Load (3.9ms)[0m EXEC sp_executesql N'SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = dbo.ActivityDim'
E, [2014-08-01T16:17:54.347119 #4072] ERROR -- : TinyTds::Error: The multi-part identifier "dbo.ActivityDim" could not be bound.: EXEC sp_executesql N'SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = dbo.ActivityDim'
这很奇怪,它应该可以工作,Model.attribute_名称呢?我已经尝试从Ruby 2恢复到Ruby 193,还恢复到sqlserver适配器3.2.13。没有变化。这感觉不再是一个活跃的记录问题。另外,如果我对db执行.connection.tables,我会得到一个完整的表列表。它只是不返回列信息。最后一次更新。我可以将完全相同的脚本定向到不同的服务器SQLServer10.50.4上,它工作得很好。原始服务器10.50.25中存在一些根本无法传递信息的问题。我不知道为什么,但在我弄明白之前,情况就是这样。你能成功地查询例如Model.all吗?请进一步跟进。Column_names返回一个空数组[]。当我从信息_SCHEMA.COLUMNS执行pp ActivityDim.find_by_sqlSELECT*时,返回一个数组,每个列一个数组,其中TABLE_NAME='{Model.TABLE_NAME}'。一位同事认为这可能与sqlserver端的安全性有关,但无法想象会发生什么。如果是安全性,则返回表名。这很奇怪。
pp Model.column_names
pp Model.find_by_sql("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = #{Model.table_name}")
D, [2014-08-01T16:17:54.299270 #4072] DEBUG -- : [1m[36mSQL (1.0ms)[0m [1mUSE [MS_GMED_TRANSACTION_NEW][0m
D, [2014-08-01T16:17:54.320753 #4072] DEBUG -- : [1m[35mActivityDim Load (3.9ms)[0m EXEC sp_executesql N'SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = dbo.ActivityDim'
E, [2014-08-01T16:17:54.347119 #4072] ERROR -- : TinyTds::Error: The multi-part identifier "dbo.ActivityDim" could not be bound.: EXEC sp_executesql N'SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = dbo.ActivityDim'