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(并且不要试图自己理解)”方法?
答案 0 :(得分:-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语法