概要
SQLにおいて、検索パラメータがない場合は、検索しない方法
詳細
モデルに検索用のスコープを作成しました。
このコードの動きとしては、コントローラから受け取ったパラメータを使って、検索しています。
問題点は、このパラメータが空白(null?)だった場合、その空白で検索してしまい、検索結果が0件となってしまいます。
そこで、空白(null)だった場合は、検索を動かさず、その検索処理をスルーさせたいです。
みなさまのお知恵を貸していただければと思います。
コード
item.rb
# アイテム名、産業idを検索 scope :name_and_id_search_in_items_or_masters, -> (search_name,search_id){ where(ActiveRecord::Base.sanitize_sql_array([" items.status != 1 AND items.name LIKE :asset_name AND items_industries.id = :industry_id OR items.status = 1 AND masters.name LIKE :asset_name AND masters_industries.id = :industry_id", { asset_name: "%#{search_name}%", industry_id: "#{search_id}" } ])) }
items_controller.rb
@items = @items.name_and_id_search_in_items_or_masters(index_search_params[:search_name],index_search_params[:search_id])
試したこと
・present?を使う
scopeの下部を
{ asset_name: search_name.present? ? "%#{search_name}%" : "", industry_id: search_name.present? ? "#{industry_id}" : "" }
この場合でも``を検索してしまい、結果がゼロ件になってしまう。
環境
Rails 6.0
回答2件
あなたの回答
tips
プレビュー