【发布时间】:2014-03-10 17:32:02
【问题描述】:
我创建了一个 Postgres 函数,我正在使用它来执行一个复杂的查询,该查询连接了许多必须由动态日期字段过滤的表。
该函数完美运行,允许我执行"SELECT * FROM trail_for_date('2014-01-01')" 之类的查询并返回一个表。
Postgres 文档中关于函数的简化示例:
CREATE FUNCTION sum_n_product_with_tab (x int)
RETURNS TABLE(sum int, product int) AS $$
SELECT $1 + tab.y, $1 * tab.y FROM tab;
$$ LANGUAGE SQL;
如何将此返回表用作 Rails/Ruby 模型,其中函数的参数是动态的?
类似下面的东西(显然行不通):
class SimplifiedExample < ActiveRecord::Base
self.table_name = 'sum_n_product_with_tab(:dynamic_input)'
end
【问题讨论】:
-
这是我原来的路线,但在我的查询中,我必须加入大约五个表,它们都在一个日期进行过滤并根据该日期进行计算......所以我需要能够传递某种变量或使用函数来完成此操作(我认为)。
-
我想我可以,尽管它有 100 多行查询,而且我必须使我的查询与数据库人员实现的数据库功能保持同步。
-
或者你可以使用 arel
Model.select(Arel::Nodes::NamedFunction.new('sum_n_product_with_tab', 6)).to_sql
标签: ruby-on-rails ruby-on-rails-3 postgresql