Rails
Gem
where_conditioner

where_conditioner という gem

More than 1 year has passed since last update.

whereにconditionを指定する際に

  employees = Employee.where(company_id: company_id) if company_id.present?

みたいのを書いていて、
どうもif XXXX.present?と書くのがイマイチな感じがしていました。
いっぱい書くとrubocopに怒られますしw
他の条件とchainしたい時も、

  employees = Employee.where(company_id: company_id)
  employees = employee.where(section_id: section_id) if section_id.present?

のように書かなくてはならなくてどうもシックリこない。

で、うまいことやってくれるgemは無いものかと探してみたら・・・ありました

where_conditioner

今回使いたいのはwhere_if_presentというメソッドです。
これを利用すると、上記に書いたプログラムが、

  employees = Employee.where_if_present(company_id: company_id)

と書くことができて、ちょっとスッキリします。
もちろんchainにも対応しているみたいで、

  employees = Employee.where_if_present(company_id: company_id).where_if_present(section_id: section_id)

みたいに繋げることもできます。

一点注意として、パラメータをそのまま引数に渡した場合

  Employee.where_if_present(company_id: params[:company_id])

params[:company_id]が""の空文字列として渡されてしまい、クエリでcompany_id = nullが指定されてしまいます。

一旦の回避策として、上記の場合は、

  Employee.where_if_present(company_id: params[:company_id].presence)

とすればOKです。
これもなんか不毛な気がしますが・・・・orz

なにか他に同じような事ができるgemを知っている方・・・教えて欲しいです