ActiveRecord::Relationでは、N + 1問題をはじめとしたパフォーマンス問題に当たることが多い。とくに、includes なのか joins なのかの区別が scope で見分けが付くと便利そう。通常、実装を隠蔽すべきだと思うが、こんな命名規を思いついた。
class Xxx < activeRecord::Base
scope :with_yyy, -> { joins(:yyy) }
scope :including_zzz, -> { includes(:zzz) }
end
これぐらいが、抽象化を邪魔しないでいいかなと。
もう一段汎用化してみて、
class Xxx < activeRecord::Base
scope :with, (rel) -> { joins(yyy) }
scope :including, (rel) -> { includes(zzz) }
end
として、さらに concerns 以下に抜き出してみてもいいが、なんかと名前空間衝突しそう。(試してないので)
みなさんの現場ではどういう名前が付いていますか?