我有一个非常简单的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
= = Updates = =
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。”#39;在表名前面返回了列名。这只是我决定一时兴起的事情。
坏消息是注释中引用的find_by_sql返回一个空数组[]。它没有返回和#的空Nil实例数组,因为它没有dbo。
我应该在哪里举报此行为?感谢。
记录器输出:
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'