Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby activerecord不返回列信息_Ruby_Activerecord_Sql Server 2008 R2_Tiny Tds - Fatal编程技术网

Ruby activerecord不返回列信息

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

我有一个非常简单的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.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'