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
這也適用於我。我現在可以從一個屬於non rails應用程序的sql數據庫訪問一個視圖。 –