HogeModel.yield_self{|relation| fuga.present? ? relation.where(moge: "mogemoge") : relation}.where…
↑
のようにチェーンしつつyield_selfブロック内で条件分け出来ます。条件に合致しない場合はrelationをそのまま返す事で、後続のチェーンに影響を出さない。
@hoge = HogeModel.where(xxx) @hoge = @hoge.where(xxx) if fuga.present? ←yield_selfを使うとこういうif文とオブジェクト更新の処理が不要になるのです
☆参考
- Ruby2.6からはyield_selfのエイリアス?"then"が使えるようになったそうです。(使えました)
- ActiveRecordクエリ以外にも色々チェーンさせて使えるらしい。
- このあたり調べていくと、レシーバーやらProcやらブロックやら僕は聞きなれない言葉が色々出てきました