カクカクしかじか

技術的なアレコレ

mongoidでパラメーターがtrue/falseであるに関わらずセットされているかで条件分岐したい場合

今回の問題

フラグを検索条件に含めていて、値がセットされていればfalse/trueに関わらず、検索条件に含めたいときに present? で判定してしまうと false が検索フラグに設定されていた場合に値がセットされているにも関わらず if文で false と判定されてしまうので、キーがあるかだけを見たい...

困ってしまう例

falseがセットされていると検索条件のクエリに反映されない...

criteria = criteria.where(deleted: @search_condition.deleted) if @search_condition.try(:deleted)

解決法

flagが検索条件モデルのアトリビュートとしてセットされているかだけを見る!
(Hashクラスなら has_key? が使えるが、モデルになるとクラスの関係で使えないので ORMやODMのアトリビュート検索系のメソッドを使う)

@search_condition.has_attribute?(:deleted)