oracle上ruby、activerecord和composite_主键的报价过高问题

oracle上ruby、activerecord和composite_主键的报价过高问题,ruby,activerecord,composite-primary-key,Ruby,Activerecord,Composite Primary Key,我收到一个Oracle错误,因为正在为表之间的关联生成SQL。没有涉及复合主键,但在添加复合主键之前没有出现此问题 正在将关联的外键添加到SQL中,如下所示: SELECT "FOO".* FROM "FOO" WHERE "FOO"."Bar_id" = 1234 “bar_id”列不存在。然而,当我们以这种方式在引号中加上“Bar_id”时,Oracle会认真对待我们,并且区分大小写 如果我们生成这个: SELECT "FOO".* FROM "FOO" WHERE "FOO".Bar

我收到一个Oracle错误,因为正在为表之间的关联生成SQL。没有涉及复合主键,但在添加复合主键之前没有出现此问题

正在将关联的外键添加到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
实际上,我已经为3.1.0版的复合_primary_keys gem修复了(读作“hacked”)这个问题,但是现在我需要升级到4.0.0,代码的更改非常显著,以至于我以前使用的简单的hackes不再那么明显

你知道怎么解决这个问题吗

所用材料的版本:

  • 复合_主_键4.0.0
  • activerecord 3.1.0
  • activerecord-oracle_增强型适配器1.4.0
  • jruby 1.6.3
    • 好的,我想我找到了问题所在。(mu_的帽子尖太短了,不能让我走上正轨。)

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


      因此,通过提升整个屈折外键,我们可以解决这个问题。真奇怪

      注意:我所说的复合_主_键带来这个问题对于gem的3.1.0版是正确的。然而,现在我使用的是activerecord的3.1.0,我删除了复合主键并对其进行了测试(在一些没有复合主键的模型上),发现如果没有所需的复合主键,我仍然会遇到同样的问题。因此,我得出结论,问题可能来自activerecord 3.1.0(而不是复合_主键4.0.0)-“Bar_id”来自于“Foo”模型中明确指定的:外部_键。我之所以指定外键,是因为实际上,在我的例子中,它更像是“bar_seq_id”。
      While foot.uninjured? { pull_trigger }...