我正在使用只读oracle数据库上的Ruby on Rails 3.0(通过oracle_enhanced_adapter连接)。Rails 3和Oracle:NLS设置拒绝小数分隔符
遇到已知的“n + 1查询”问题,我尝试了包含方法。
与Rails指南中的描述不同,生成的第二个查询列出了所需的id不是整数,而是浮点值的字符串表示形式。原始ID是NUMBER类型。
不幸的是,数据库的NLS设置是针对德国的,其中包括NLS_NUMERIC_CHARACTERS
,它预计“,”作为小数点分隔符。所以我总是得到一个ORA-01722错误as described here。
更确切地说:
@var.assoc.includes(:another_assoc).where("column_1 = ?", some_value)
产量
ActiveRecord::StatementInvalid: OCIError: ORA-01722: invalid number: SELECT "TABLE_A".* FROM "TABLE_A" WHERE ("TABLE_A"."ID" IN ('1715.0','1716.0','1717.0','1718.0','1719.0','1720.0','1721.0'))
(我不得不简化上述铁路代码,因为它包含了像 “串符号” 一些分散注意力的细节转换)
如前所述数据库是只读的,所以使用
alter session set nls_numeric_characters = '.,'
直接在数据库上工作。但我无法找到改变导轨会议的正确方法。
我发现的一切似乎都指向Rails 2或使用了不推荐使用的函数。
我该如何解决Rails 3.0的这个问题?
或者: 如何强制Rails(或者oracle_enhanced_adapter)将所有列出的id转换为Fixnum?
感谢和问候, 添
你好,欢迎来到stackoverflow。你能否请发表这个声明的导轨代码? – Patrick 2010-11-22 11:24:45