1

Rails にテーブルを含むレポートがあり、ユーザーは必要に応じて、場所の選択や日付の範囲の選択などのフィルターを設定し、ajax 要求を介してテーブルを更新できます。

任意の日付/空白またはすべての場所になるように、この where 句を記述できますか?

@orders = Order.where('created_at <= ? AND ? <= created_at AND location_id = ?', date_order_start, date_order_end, loc_filter)

上記のクエリは空白 ("" など) で失敗し、nil を入力すると SQL で null に変換されます。

現在この問題を解決するために、ajax リクエストに値が存在するかどうかを確認し、ケースに応じて異なる where 句を作成する一連の条件ステートメントがあります。私の現在の条件は扱いにくく、エラーが発生しやすく、スケーラブルではありません。

「wildcard sql」などを検索すると、テキスト検索 (つまり、%) に行き着きますが、これはこの場合には当てはまらないと思います。

postgresql を使用して Rails 3.2 を実行しています。

4

1 に答える 1

2

次のように、クエリ ステートメントと引数の配列を使用することがあります。

queries = []
args = []
if some_condition
  queries.push("created_at <= ?")
  args.push(whatever_date)
end

if another_condition
  queries.push("created_at >= ?")
  args.push(another_date)
end

@order = Order.where(queries.join(" AND "), *args)
于 2013-10-25T14:33:36.480 に答える