如何将SQL Server表视图用作Rails模型(只读)?

我正在使用SQL Server作为我的Rails项目的数据库。 我正在尝试创建一些模型用于第三方数据库,只想从这个数据库中读取。 所以我查看了我想创建一个对象的表,然后我想将我的活动记录模型指向它。 但是,在rails控制台中,我没有收到预期的结果。 回馈一些正确信息的唯一例子是当我对对象进行count时,如下面的例3所示。

我正在使用以下gem连接到我的SQL Server:

 gem 'tiny_tds' gem 'activerecord-sqlserver-adapter' 

我也安装了freetds-dev 0.91-6build1

例1

 2.2.2 :004 > Game.all Game Load (268.7ms) EXEC sp_executesql N'SELECT [games].* FROM [games]' => #<ActiveRecord::Relation [#, #, #, #, #, #, #, #, #, #, ...]> 

例2

 2.2.2 :001 > Game.first SQL (1.1ms) USE [Incoming] Game Load (1.8ms) EXEC sp_executesql N'SELECT [games].* FROM [games] OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY' TinyTds::Error: Incorrect syntax near '0'.: EXEC sp_executesql N'SELECT [games].* FROM [games] OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY' ActiveRecord::StatementInvalid: TinyTds::Error: Incorrect syntax near '0'.: EXEC sp_executesql N'SELECT [games].* FROM [games] OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY' from /home/daveomcd/.rvm/gems/ruby-2.2.2/gems/activerecord-sqlserver-adapter-4.2.3/lib/active_record/connection_adapters/sqlserver/database_statements.rb:336:in `each' ... ... 

例3

 2.2.2 :008 > Game.count (4.7ms) EXEC sp_executesql N'SELECT COUNT(*) FROM [games]' => 12541 

incoming_model.rb

 class IncomingModel < ActiveRecord::Base self.abstract_class = true self.table_name_prefix = "Incoming.dbo." establish_connection "incoming_#{Rails.env}".to_sym end 

game_model.rb

 class Game < IncomingModel self.table_name = 'games' end 

database.yml的

 incoming_development: <<: *default adapter: sqlserver host: games-data port: 1433 database: Incoming username: **** password: **** pool: 5 timeout: 15000 

所以我发现我需要为表指定一个主键。 所以这是我做的补充。

 class Game < IncomingModel self.table_name = 'games' self.primary_key = 'game_id', 'this_other_column' end 

我还必须为我的需求合并gem composite_primary_keys ,但这可能比一些开发人员需要的更多。 感谢任何花时间尝试帮助解决此问题的人!