我正在使用gem activerecord-sqlserver-adapter
使用Ruby on Rails連接到現有的Microsoft SQL Server。我修改了config\application.rb
文件來設置我的table_name_prefix
爲以下當rails上的ruby嘗試將add_index添加到新表時,出現ODBC 3700錯誤
config.active_record.table_name_prefix = 'msr.FSCR_'
讓所有使用Ruby on Rails的創建我的表都在msr
模式,並與FSCR_
前綴組合在一起。我有一個使用以下
rails generate scaffold Customer name:string status:string
rake db:migrate
其中創建表msr.FSCR_customers
這是正確創建的表/支架。然後,我創建了以下網站的模型:
rails generate scaffold Site name:string addr1:string addr2:string city:string
state:string zip:string
並且模型/腳手架已正確生成。在生成命令創建的數據庫遷移文件20120718221629_create_sites.rb
如下
class CreateSites < ActiveRecord::Migration
def change
create_table :sites do |t|
t.string :name
t.string :addr1
t.string :addr2
t.string :addr3
t.string :city
t.string :state
t.string :zip
t.string :phone
t.string :fax
t.integer :created_by
t.references :customer
t.timestamps
end
add_index :sites, :customer_id
end
end
然而,當我運行rake db:migrate
表彰我收到以下錯誤信息:
ODBC::Error: 37000 (102) [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect
syntax near '.'.: CREATE INDEX [index_msr].[FSCR_sites_on_customer_id] ON [msr].
[FSCR_sites] ([customer_id])
如果我註釋掉線add_index :sites, :customer_id
它創建表正好。當表創建時,我看到我的外鍵不在那裏。如何更改/解決此問題?
UPDATE
我想我找到了問題,但我不知道如何去改變它。因爲我使用的msr.FSCR_
表前綴,它試圖用前綴創建索引名index_
+ msr.FSCR_
+ {} INDEX_NAME所以插入試圖創建
[index_msr].[sites_on_customer_id]
沒有的index_msr
架構,以便我預計這會失敗。我真正想要的是索引名是被
[index_msr_sites_on_customer_id]
有沒有一種方法,以消除來自ActiveRecord
類的創建索引部分].[
?
用線'客戶:references'你得到的銅表中的數據庫中創建的stomer_id列。 – Matthew 2012-07-19 13:34:51