我需要涉及我的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
列的所有查询。
但似乎轨道没有为此做好充分准备,应该制作猴子补丁:
http://mentalized.net/journal/2006/03/27/using_sql_server_views_as_rails_tables/ 和我发现的其他问题。
另一个是在Issue
模型上实现该方法:
def self.default_scope
end
但我不知道如何在其中使用SQL。
使用rails实现此目的的正确方法是什么?我想避免错误的模式和低可读性。
谢谢!
答案 0 :(得分:0)
我相信你可以通过在模型中添加一个方法来解决这个问题,该方法将执行所需的计算并返回布尔值。