我有一个用Rails和PostgreSQL数据库编写的应用程序,我的应用程序有一些复杂的查询,我用它们 Package 在PostgreSQL视图中,这样我就可以将Rails模型“插入”到它们中--在应用程序层面上使事情变得更简单。
到目前为止,上面的方法是成功的,因为我可以通过这些视图所附带的模型来使用ActiveRecord的许多功能。
然而,我正面临着一种情况,我必须优化其中的一些视图,但我发现的唯一方法是将PostgreSQL视图转换为PostgreSQL函数,以便我可以传递参数用作约束(在where
子句中)。这种方法使我的视图速度提高了100倍!
但问题是,要调用这些函数,我需要做一些类似Model.find_by_sql('SELECT * FROM my_pg_function(?, ?)')
的事情-它返回Model示例的数组。这并不理想,因为我需要方法链(如Model.find_by_sql('SELECT * FROM my_pg_function(?, ?)').find(...)
)-否则我将不得不在应用程序中进行大量更改。
关于如何使用原始查询以可链接的方式加载数据,有什么想法吗?
1条答案
按热度按时间eoigrqb61#
您应该能够使用一点Arel来实现这个目标。
字符串
这将生成以下查询:
型
在这种情况下,这将允许您动态替换函数
[1,2]
的参数。以及将附加条件链接到“表”,因为它将在过程中返回ActiveRecord::Relation
对象。所以你可以像这样实现:
型
使用像
型