新手问题 寻找一个执行复杂 SQL 的 Grid 解决方案

lotusroot · 2014年04月14日 · 最后由 5swords 回复于 2014年04月15日 · 2175 次阅读

在做一个分析类项目,要执行复杂 SQL 查询,虽然通过 ActiveRecord 的 find_by_sql 可以执行 SQL,但返回结果受到 Model 的限制,而期望 SQL 返回的是组合多表字段的 Grid,虽然可以考虑把 SQL 加以分解执行,但需要额外写程序将不同返回 Model 内容加以合并,如此执行效率就打大折扣了,所以,请教高手,如何解决这个问题?

貌似解决方法很简单,还是用 find_by_sql 执行复杂 SQL,然后用 read_attribute 读出来

楼上读取也是可行的,或直接将查询的字段 as model 对应属性值,程序执行效率比复杂的 SQL 效率来讲小的多吧

这个贴的 22 楼,我写了个 trytry。一般情况下 我都在 model 里写,分页后没怎么考虑效率问题。

def self.collect_data(search_result)
  search_result.collect do |r|
    {
      'field1' => r.trytry('b.c.d.e'),
      'field2' => r.trytry('b.c.f'),
      ...
    }
  end
end

当然也可以考虑 把 field1 和 b.c.d.e 的这个关系保存起来,命名一个 collection_name, 给 arel 的结果集加上 collect_data(collection_name)

需要 登录 后方可回复, 如果你还没有账号请 注册新账号