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 的未定义方法‘每个’”。

有什么线索吗?有没有“find_by_raw_sql(不要试图自己理解)”的方法?

4

1 回答 1

-1

好的。问题解决了。

RoR 中的某些东西喜欢那些 oracle 的“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 回答