はじめに
とあるコードレビューで指摘を受けた内容です。
今後の自分に対してのメモとしての備忘録です。
修正前
対象コード
scope :public_record, -> {
where(open_at: ..Time.zone.now)
.where(close_at: Time.zone.now...)
.or(where(open_at: ..Time.zone.now).where(close_at: nil))
.or(where(open_at: nil).where(close_at: Time.zone.now...))
}
指摘内容
このスコープがとても見づらく、次に条件式を加える際に何処に手を加えればいいかわかりづらいとのこと
修正後
対象コード
scope :public_record, -> {
query1 = where(open_at: ..Time.zone.now).where(close_at: Time.zone.now...)
query2 = where(open_at: ..Time.zone.now).where(close_at: nil)
query3 = where(open_at: nil).where(close_at: Time.zone.now...)
query1.or(query2).or(query3)
}
さいごに
個人的には修正する必要あるかな?と思う反面、判る人には判るが判らない人にはとても読みづらいとのことでした。
修正後はとても好評で、読みやすく理解しやすいとのことでした。
scopeとしてどうなのだろう?と思う所もありますが、クエリとして成立してましたのでヨシとしました。
今後は、こういったものが可読性だったり保守性に繋がると思うので注意していきたいと思った次第です。