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 版本修复(读作“hacked”)此问题,但现在我需要升级到 4.0.0,代码更改非常重要,以至于我以前使用的简单黑客不再是如此明显。

知道如何解决这个问题吗?

使用的东西的版本:

  • 复合主键 4.0.0
  • 活动记录 3.1.0
  • activerecord-oracle_enhanced-适配器 1.4.0
  • jruby 1.6.3
4

1 回答 1

0

好的,我我找到了问题所在。(向 mu_is_too_short 致敬,让我走上正轨。)

While foot.uninjured? { pull_trigger }...

因为我们的表不遵循 ActiveRecord 的主键和外键约定,而是以“_seq_id”而不是“_id”结尾,所以我们为 ActiveSupport::Inflector.foreign_key 编写了一个覆盖,它基本上解调了模型的类名并添加了“_seq_id” “最后。解调方法是给我们留下“Bar”然后变成“Bar_seq_id”的方法。

因此,通过升级整个变形外键,我们可以解决这个问题。完全奇怪。

于 2011-09-22T20:30:41.677 回答