今回の問題
フラグを検索条件に含めていて、値がセットされていれば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)