ruby-on-rails - 使用 Postgres 函数作为 ActiveRecord 模型

标签 ruby-on-rails ruby-on-rails-3 postgresql

我创建了一个 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

最佳答案

创建一个包含您需要的数据的 View ,然后您可以轻松地创建一个 ActiveRecord 模型来访问它。

您没有提供数据的具体细节,但作为一个简单的例子,在 Postgres 中创建您的 View 以收集您的数据;

  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

关于ruby-on-rails - 使用 Postgres 函数作为 ActiveRecord 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22307187/

相关文章:

sql - 关联记录的最大数量

ruby-on-rails - 复制记录及其子项 - 但子项会从旧记录中删除

sql - rails : Using jquery tokeninput (railscast #258) to create new entries

PostgreSQL:如何在长输出中向上滚动

sql - Postgres - 按组分页

ruby-on-rails - ActionMailer "Net::ReadTimeout"将延迟作业与 Rackspace "emailsrvr.com"一起使用时

ruby-on-rails - Rails:如何修复 ActionView::MissingTemplate 错误?

ruby-on-rails - 奇怪的未初始化常量错误(Rails)

javascript - 你知道使用 javascript 游戏引擎的简单方法吗?

ruby-on-rails - 带有锁定的 Rails find_in_batches