私はRuby on Rails 3.0を読取り専用oracleデータベース(oracle_enhanced_adapter経由で接続)に取り組んでいます。Rails 3とOracle:NLS設定で小数点の桁区切りが拒否されました
既知の「n + 1クエリ」問題に遭遇して、私はインクルードメソッドを試しました。
Railsガイドの説明とは異なり、生成された2番目のクエリは、必要なIDを整数ではなく浮動小数点値の文字列表現としてリストしました。元のIDはNUMBER型です。
残念ながら、データベースのNLS設定は、小数点区切り文字として "、"が必要なを含め、ドイツ向けです。だから私はいつも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に変換するにはどうすればよいですか?
おかげで、よろしく、 ティム
こんにちはTimさん、こんにちは。あなたはこの声明を生成するレールコードを投稿してください。 – Patrick