我有一个非常简单的 ruby 脚本,其中没有返回 columns_names。下面的代码返回正确的行数 10,000。但是,对列名称的请求会返回一个空数组 []。我的 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
= = 更新 = =
SqlServer 是 10.5 (2008 R2)。我将 active_record etal 更新为 4.1.4。没变。Model.attribute_names 返回一个空数组。当我切换到 sqlite3 适配器并提供一个虚拟 db 文件时,这些属性将返回 ok。
= = 几乎成功 = =
class Model < ActiveRecord::Base
self.table_name = 'dbo.Model'
end
好的。我不明白数据库的详细信息。但强制输入“dbo”。以表名的前面返回列名。这只是我决定一时兴起尝试的东西。
坏消息是注释中引用的 find_by_sql 返回一个空数组 []。它不会像没有 dbo 那样返回 # 的空 Nil 实例数组。
我应该向哪里报告这种行为?谢谢。
记录器输出:
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'