1

テーブル間の関連付けに対して SQL が生成されるため、Oracle エラーが発生します。複合主キーは関係ありませんが、composite_primary_keys gem を追加する前はこの問題は発生していませんでした。

アソシエーションの外部キーは、次のように SQL に追加されています。

SELECT "FOO".* FROM "FOO"  WHERE "FOO"."Bar_id" = 1234

列「bar_id」は存在します。ただし、このように "Bar_id" を引用符で囲むと、Oracle はこれを真剣に受け止め、すべて大文字と小文字を区別します。

これを生成していた場合のみ:

SELECT "FOO".* FROM "FOO"  WHERE "FOO".Bar_id = 1234

またはこれ:

SELECT "FOO".* FROM "FOO"  WHERE "FOO"."BAR_ID" = 1234

大丈夫です。

表示されるエラーは次のとおりです。

ActiveRecord::StatementInvalid: NativeException: java.sql.SQLException: ORA-00904: "FOO"."Bar_id": invalid identifier

私は実際にこれを修正 (「ハッキング」) し、composite_primary_keys gem のバージョン 3.1.0 で使用しましたが、4.0.0 にアップグレードする必要があるため、コードの変更が非常に重要であるため、以前使用していた単純なハックはもはや必要ありません。とても明白です。

これを修正する方法はありますか?

使用されたもののバージョン:

  • 複合主キー 4.0.0
  • アクティブレコード 3.1.0
  • activerecord-oracle_enhanced-adapter 1.4.0
  • jruby 1.6.3
4

1 に答える 1

0

わかりました、私は問題を見つけたと思います。(私を正しい軌道に乗せるためのmu_is_too_shortへのハットチップ。)

While foot.uninjured? { pull_trigger }...

テーブルは主キーと外部キーのActiveRecord規則に従っていないが、「_id」ではなく「_seq_id」で終わるため、ActiveSupport :: Inflector.foreign_keyのオーバーライドを作成しました。これは、基本的にモデルのクラス名を非変調化し、「_seq_id」をタックします。 " 終わりに。demodulizeメソッドは、「Bar」を残して「Bar_seq_id」になるメソッドです。

したがって、屈折した外部キ​​ー全体をアップケース化することで、この問題を解決できます。完全に奇妙です。

于 2011-09-22T20:30:41.677 に答える