我正在使用只讀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