0
Help us understand the problem. What are the problem?

posted at

updated at

whereメソッドを使ってDBから取り出すデータを絞り込む

実現したかった実装

送られてくるパラメーターの条件を満たしたデータを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"})

私自身がまだ実務経験のない初学者のため、知らない不具合や懸念材料があるかも知れません。
もし気になる点がございましたらご指摘いただければ幸いです。

この投稿が誰かの為になれば幸いです。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?