我在一个在几个不同机构运行的rails应用程序上工作。它必须与每个遗留数据库连接。所有这些数据库都是Oracle,所有列名和表名都是小写的。
其中一家机构已将其数据库移至MS SQL数据库。结构都是一样的,我已经将应用程序连接到它,它看起来一切正常,除了一个问题。
在MS SQL db上,所有表名和列名现在都是大写的。
有没有办法让主动记录自动将所有对DB的调用转换为大写?我可以覆盖某个方法吗?
所以,我认为(不能测试很多)我已经修复了列名部分。我基本上已经完成了
column_names.each {|c| alias_attribute c.downcase, c}
在每个受影响的模型中(虽然我已经把它放在一个模块中,我可以包括或不包括,取决于适配器。
我正在尝试弄清楚如何处理表名,我可以把它放在同一个模块中。
答案 0 :(得分:4)
确定。浪费了几个小时试图解决问题的代码后,我在activerecord-sqlserver-adapter
中找到了配置选项,它可以为您完成所有操作。请放弃:
ActiveRecord::ConnectionAdapters::SQLServerAdapter.lowercase_schema_reflection = true
进入config/initializers
中的文件,一切正常。
D'哦!
答案 1 :(得分:2)
不是为所有模型设置表名(这将影响到另一个数据库的任何部署),我建议初始化程序以编程方式将表名更改为基于适配器的大写。这有点猜测,但是这样的事情应该让你开始:
#config/initializers/table_name.rb
module ActiveRecord
module ModelSchema
module ClassMethods
def table_name
reset_table_name unless defined?(@table_name)
if ActiveRecord::Base.connection.instance_values["config"][:adapter] == "mssql"
@table_name.upcase
else
@table_name
end
end
end
end
end