我们公司喜欢计算模糊指标的报告——这些指标不能用 ActiveRecord 的查找器(find_by_sql 除外)计算,而且 ruport 的基于 ruby 的功能太慢了。
是否有插件、gem 或 db 适配器可以在数据库层进行大量计算?您创建复杂报告的解决方案是什么?
我们公司喜欢计算模糊指标的报告——这些指标不能用 ActiveRecord 的查找器(find_by_sql 除外)计算,而且 ruport 的基于 ruby 的功能太慢了。
是否有插件、gem 或 db 适配器可以在数据库层进行大量计算?您创建复杂报告的解决方案是什么?
虽然不是数据库不可知论者,但我们的解决方案是 plpgsql 函数,使用 Ruby 和 ActiveRecord 变得非常慢。
Thoughtbot 的 Squirrel 插件为 ActiveRecord 的 find 方法添加了许多 Ruby 风格的功能,具有多层条件、范围和嵌套模型关联:
www.thoughtbot.com/projects/squirrel/
您的报告是否有任何固有的东西阻止使用 SQL 视图或存储过程?
在一个特定的项目中,我经常发现一种有用的技术是将您的 SQL 查询(可能非常复杂)创建为数据库中的命名视图,然后使用
YourModel.connection.select_all(query)
拉回数据。这不是最佳方法。我热衷于探索对它的改进。
不幸的是,正如您所建议的,在 Rails 中计算复杂的基于数据库的报告的支持似乎相当有限。
听起来好像您的表格可以标准化。在我工作的一个地方,我们所做的标准化量正在影响我们的报告需求,因此我们创建了一些包含一堆聚合数据的影子表,并针对这些数据进行报告。
我同意 Neil N 的评论,即这个问题有点模糊,但也许这会让你朝着正确的方向前进?
如果您发现 ActiveRecord 缺乏复杂查询所需的表达能力,您可能需要考虑使用DataMapper或Sequel作为 ORM。放弃 ActiveRecord 不会是一个很可能做出的决定,但至少它可能值得研究。