2015-08-20 34 views
1

我正在使用SQL Server作爲我的Rails項目的數據庫。我正在嘗試創建一些用於第三方數據庫的模型,並且只想從此數據庫讀取數據。所以我想了解一下我想創建一個對象的表格,然後我想將我的活動記錄模型指向它。但是,在rails控制檯中,我沒有收到預期的結果。如下例3所示,當我在對象上執行count時,唯一給出一些正確信息的示例是。如何將SQL Server表視圖用作Rails模型(只讀)?

我用下面的寶石連接到我的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 [#<Game >, #<Game >, #<Game >, #<Game >, #<Game >, #<Game >, #<Game >, #<Game >, #<Game >, #<Game >, ...]> 

實施例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 

回答

2

所以我發現我需要指定表的主鍵。所以這裏是我所做的補充。

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

我也不得不納入我的需要的寶石composite_primary_keys,然而,這可能是比一些開發商將需要更多。感謝任何花時間嘗試幫助解決此問題的人!

+0

這也適用於我。我現在可以從一個屬於non rails應用程序的sql數據庫訪問一個視圖。 –