実現したかった実装
送られてくるパラメーターの条件を満たしたデータをDBから取り出す実装をしたくて辿り着きました。
whereメソッドを使用する
モデル名.where(条件)とする事で条件に一致したデータを取り出せます。
行った実装
whereメソッドに渡す引数はハッシュの形でいいことに気づき下記のようなクラスメソッドを書きました。
def self.match_recipes(dates)
hash = {}
dates.each{|key, value|
unless value.blank?
hash[key] = value
end
}
Recipe.where(hash)
end
引数に条件の形となるハッシュを渡します。
dates = {"category_id"=>"1", "genre_id"=>"1", "type_id"=>""}
recipe = Recipe.match_recipes(dates)
呼び出しのイメージです。
引数で渡したハッシュ型のデータはメソッド内のeach文でkeyとvalueに代入しながら繰り返し処理が行われます。
unleesを使用しvalueが空ではない時のみ空のハッシュに追加していく事でparamsから送られてきた絞り込みたいデータの内、値があるもののみを取り出したハッシュを作ります。
hash = {"category_id"=>"1", "genre_id"=>"1"}
↑出来上がり
このハッシュをwhereメソッドの引数に渡してあげる事で、条件に一致したデータのみを取り出す事ができました。
↓イメージ
recipe = Recipe.match_recipes({"category_id"=>"1", "genre_id"=>"1"})
私自身がまだ実務経験のない初学者のため、知らない不具合や懸念材料があるかも知れません。
もし気になる点がございましたらご指摘いただければ幸いです。
この投稿が誰かの為になれば幸いです。