Hel*_*rra 9 postgresql ruby-on-rails ruby-on-rails-3
我创建了一个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;
Run Code Online (Sandbox Code Playgroud)
我怎么能将这个返回表用作Rails/Ruby模型,其中函数的参数是动态的?
像下面的东西(显然不起作用):
class SimplifiedExample < ActiveRecord::Base
self.table_name = 'sum_n_product_with_tab(:dynamic_input)'
end
Run Code Online (Sandbox Code Playgroud)
小智 1
创建一个包含所需数据的视图,然后您可以轻松创建 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)
Run Code Online (Sandbox Code Playgroud)
然后创建你的模型
class DataTrail < ActiveRecord::Base
scope :on_date, -> (date) { where(trail_date: date) }
end
DataTrail.on_date(Date.today)
Run Code Online (Sandbox Code Playgroud)
您可以在 Enterprise Rails 书中找到更多信息。现在它有点过时了,但原则是合理的。
http://enterpriserails.chak.org/full-text/chapter-11-view-backed-models