activerecord不返回列信息

时间:2014-07-23 21:56:34

标签: ruby activerecord sql-server-2008-r2 tiny-tds

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

0 个答案:

没有答案