我创建了一个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
解决方法
创建包含所需数据的视图,然后您可以轻松创建ActiveRecord模型来访问它.
您尚未提供数据的具体详细信息,但作为一个简单示例,请在Postgres中创建视图以收集数据;
create or replace view data_trails as select t.*,td.trail_date from trails t join trail_dates td on (td.trail_id = t.id)
然后创建您的模型
class DataTrail < ActiveRecord::Base scope :on_date,-> (date) { where(trail_date: date) } end DataTrail.on_date(Date.today)
您可以在Enterprise Rails一书中找到更多信息.它现在变得有点过时,但原则是合理的.
http://enterpriserails.chak.org/full-text/chapter-11-view-backed-models