【发布时间】:2019-11-20 11:07:51
【问题描述】:
首先,我刚开始在 stackoverflow 上提问。如果您对这个问题投反对票,请告诉我为什么以及如何更改它。
所以我正在为我们的实习生服务制作状态网页。
这是我拥有的代码,要清楚我想让“most_recent_checkresult_ids”方法更苗条:
1 class OverallStatus
2 def initialize(check_ids)
3 @check_ids = check_ids
4 end
5
6 def ok?
7 !not_ok?
8 end
9
10 def not_ok?
11 Checkresult.where(id: most_recent_checkresult_ids).where(status: false).exists?
12 end
13
14
15
16 private
17
18 def most_recent_checkresult_ids
19 if @check_ids == nil
20 Checkresult
21 .select(:check_id, "MAX(id) as id")
22 .group(:check_id)
23 .map { |cr| cr.id }
24 else
25 Checkresult
26 .select(:check_id, "MAX(id) as id")
27 .where(check_id: @check_ids)
28 .group(:check_id)
29 .map { |cr| cr.id }
30 end
31 end
32 end
我怎么能这样做?我不想要冗余代码,我知道有办法缩短它,但我不知道如何。
【问题讨论】:
-
如果不给你确切的代码,我会首先考虑这些查询的作用以及是否有其他方法可以做到这一点(通过查看你在这里的内容,我可以肯定地说有) .尝试将逻辑封装在
Checkresult的范围内,然后您将看到重构。
标签: ruby-on-rails ruby helper