1

Activerecord が私の sql をのぞき見していて、間違っているようです。私はこれを見つけています:

sql = "
  select etn.* 
  from edittree_name etn where id = #{id}"  
Name.find_by_sql(sql)

動作しますが、これは:

sql = "
  with pp as ( select * from dual)
  select etn.* 
  from edittree_name etn where id = #{id}"  
Name.find_by_sql(sql)

「1:Fixnum の未定義のメソッド「each」」が表示されます。

手がかりはありますか?「find_by_raw_sql (そして自分で理解しようとしないでください)」メソッドはありますか?

4

1 に答える 1

-1

Ok。問題が解決しました。

RoR の何かが、オラクルの "with" 句を好まないことがあります。問題は、RoR が最初に "select" 句を確認することを期待しているようです。with 句を from 句にシフトすることで、これに対処できます。

これ

with xx(parent) as (
  select parent from link where
    link.child = {#id}
  union all
  select parent from xx, link 
    where link.child = xx.parent
)
select foo.*
from foo,xx 
where foo.id = xx.parent

これになる

select foo.*
from foo, 
(
  with xx(parent) as (
    select parent from link 
      where link.child = {#id}
    union all
    select parent from xx, link 
      where link.child = xx.parent
  )
  select * from xx
) yy
where foo.id = yy.parent

問題は、Rails が新しい SQL 構文を正しく解析する必要があることです。

于 2012-09-20T03:35:32.580 に答える