2

我需要在涉及我的Issue模型的每个查询中将另一列附加到其行中。在我的情况下,如果问题的 created_at 日期从现在开始总共经过 12 小时(营业时间:上午 8:00 - 下午 18:00,不包括周六和周一),则此列是布尔值。

SELECT *, hours > 12 as alert FROM
  ( 
  SELECT *, 
        (SELECT count(*) - 1 AS work_hours
            FROM   generate_series ( created_at
                                    , now()
                                    , interval '1h') h
            WHERE  EXTRACT(ISODOW FROM h) < 6
            AND    h::time >= '08:00'::time
            AND    h::time <  '18:00'::time) as hours

  FROM issues
  ) as issues_with_alert

这将返回所有问题列,例如id, title, description... 以及计算得到的列:alert

我想制作一个 sql 视图issues_view并将模型上的表名更改为视图名。

self.table_name = "issues_view"

然后视图应该关心从它继承alert列的所有查询。

但似乎 rails 并没有为此做好充分准备,应该制作猴子补丁:

http://mentalized.net/journal/2006/03/27/using_sql_server_views_as_rails_tables/ 和我发现的其他问题。

另一种是在模型上实现该方法Issue

def self.default_scope

end

但我不知道如何将 SQL 放入其中。

用 Rails 实现这一目标的正确方法是什么?我想避免错误的模式和低可读性。

谢谢!

4

1 回答 1

0

我相信您可以通过向模型添加一个方法来解决这个问题,该方法将执行所需的计算并返回布尔值。

于 2013-07-29T02:07:59.577 回答