我需要在涉及我的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 实现这一目标的正确方法是什么?我想避免错误的模式和低可读性。
谢谢!