2012-07-19 36 views
0

我正在使用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類的創建索引部分].[

回答

0

您沒有customer_id專欄..是否有助於補充?或者只是添加的網站索引和擺脫CUSTOMER_ID的

+0

用線'客戶:references'你得到的銅表中的數據庫中創建的stomer_id列。 – Matthew 2012-07-19 13:34:51

0

我能夠通過修改從鐵軌產生的數據庫遷移文件,以解決這個問題如下:

生成的文件

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 

更新的文件

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, :name => 'sites_by_customer' 
    end 
end 
相關問題