0

モデルを検索するための 3 つのパラメーターと where メソッドを持つ単純な検索アクションがあります。検索していくつかのパラメーターが nil の場合、必要なレコードが返されません。nil/blank 以外のパラメーターのみを使用してデータベースを検索したい。そのため、1 つのカテゴリのみがパラメータに入力されて送信された場合、コントローラが他の 2 つのパラメータを無視するようにします。ただし、他のパラメーターが存在する場合は、それらを検索に含めたいと思います。

多くのアプローチを試しましたが、適切に機能させることができません。これが私のコードです。

hash = []
cat = :category_id => params[:category_id]
col = :color_id => params[:color_id]
brand = :brand_id => params[:brand_id]

if params[:category_id].present?
  hash += cat
end

if params[:color_id].present?
  hash += col
end

if params[:brand_id].present?
  hash += brand
end

@results = Piece.where(hash).preload(:item).preload(:user).group(:item_id).paginate(:page => params[:page], :per_page => 9)

変数を to_a と呼ばれる文字列とハッシュに入れ、それらを (",") で結合しました。何も機能しません。

ありがとう

4

1 に答える 1

2

このコードを試してください。

criteria = { :category_id => params[:category_id], :color_id => params[:color_id],
  :brand_id => params[:brand_id] }.select { |key,value| value.present? }


@results = Piece.where(criteria).preload(:item).preload(:user).group(:item_id).
  paginate(:page => params[:page], :per_page => 9) 
于 2012-09-03T19:15:31.647 に答える