Rails勉強中です。
ユーザの入力した検索条件によって、whereメソッドを変える場合の正しい書き方について教えてください。
ユーザが検索条件を入力して、それに応じた結果を一覧で返す画面を作っています。
検索条件(今回はparams[:search])の各パラメータの有無でwhereメソッドを複数、使いたいです。
具体的にはBoardモデルにおいて、Board.title、Board.updated_atによる絞り込み条件を付けたいです。
・ユーザが入力した検索条件にtitleがあればタイトルによるLIKE検索
・ユーザが入力した検索条件に更新日があれば更新日による絞り込み
というようにIFの条件によって検索条件を追加したい場合の書き方が分かりません。
実際に書いてるソースコードは下記です。
Ruby
1#app/models/board.rb 2scope :mypage_search, ->(user_id, search_params = {}) do 3 4 board = Board.where(user_id: user_id) 5 board = board.where("title LIKE %?%", search_params[:title]) if search_params[:title] 6 7 if search_params[:updated_at] 8 9 if search_params[:updated_at] == 1 10 board = board.where("updated_at > ?", Time.zone.datetime.strftime('%Y%m%d 00:00:00')) 11 12 elseif earch_params[:updated_at] == 3 13 board = board.where("updated_at > ?", 3.day.ago) 14 15 elseif earch_params[:updated_at] == 7 16 board = board.where("updated_at > ?", 7.day.ago) 17 end 18 19 end 20 binding.pry 21 22 end
・
これだと実行されるSQLが
SQL
1SELECT `boards`.* FROM `boards` WHERE `boards`.`user_id` = 3 AND (title LIKE %'dsfaga'%)
のようにANDの後にある変な()が付いたりしてうまくいきません。
詳しい方、正しい書き方を教えていただけないでしょうか?
ちょっと説明が下手な感じがしてますが。。^^;
詳しい方、お手数ですがよろしくお願いします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/05 10:10