在做一个分析类项目,要执行复杂 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)