我正在使用 gemactiverecord-sqlserver-adapter
连接到使用 Ruby on Rails 的现有 Microsoft SQL Server。我修改了config\application.rb
文件以将我table_name_prefix
的设置如下
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
并且模型/脚手架已正确生成。generate命令创建的数据库迁移文件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
它会创建表格就好了。创建表时,我看到我的外键不存在。如何更改/解决此问题?
更新
我想我找到了问题,但我不知道如何改变它。因为我正在使用它的表前缀,msr.FSCR_
所以它试图创建前缀为 ++ {index_name} 的索引名称,index_
所以msr.FSCR_
插入试图创建
[index_msr].[sites_on_customer_id]
没有架构,index_msr
所以我希望这会失败。我真正想要的是索引名称是
[index_msr_sites_on_customer_id]
有没有办法].[
从类的创建索引部分中删除ActiveRecord
?