2

我在一个运行在几个不同机构的 Rails 应用程序上工作。它必须与每个旧数据库接口。所有这些数据库都是 Oracle,所有的列名和表名都是小写的。

其中一家机构已将其数据库移至 MS SQL 数据库。结构都是一样的,我已经将应用程序连接到它,看起来一切正常,除了一个问题。

在 MS SQL db 上,所有表名和列名现在都是大写的。

有没有办法让活动记录自动将所有对数据库的调用转换为大写?我可以在某处覆盖的方法?


所以,我认为(还不能测试很多)我已经修复了列名部分。我已经基本完成了

column_names.each {|c| alias_attribute c.downcase, c}

在每个受影响的模型中(尽管我已将其固定在我可以包含或不包含的模块中,具体取决于适配器。

我正在尝试找出可以合并到同一个模块中的表名的处理方法。

4

2 回答 2

5

好的。在浪费了数小时试图解决问题后,我找到了activerecord-sqlserver-adapter为您完成所有工作的配置选项。只需放下:

ActiveRecord::ConnectionAdapters::SQLServerAdapter.lowercase_schema_reflection = true

进入一个文件config/initializers,一切正常。

哦!

于 2013-09-02T14:31:01.340 回答
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
于 2013-09-02T13:11:10.327 回答