如何写出一个句子来处理特定值或任何值

时间:2013-10-25 14:27:12

标签: sql ruby-on-rails activerecord

我在Rails中有一个表格,其中用户可以选择设置过滤器,例如选择位置或选择一系列日期,并通过ajax请求更新表格。

我可以写这个where子句,以便任何日期/空白或所有位置吗?

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

上面的查询在空白处失败(例如,&#34;&#34;)如果我把nils它们转换为SQL中的空值。

为了解决这个问题,我现在有一堆条件语句,用于检查ajax请求中是否存在值,然后根据具体情况创建不同的where子句。我目前的条件是笨拙的,容易出错且不可扩展。

搜索&#34;通配符sql&#34;最后引导我进行文本搜索(即%),在这种情况下,我认为不适合。

我使用postgresql在Rails 3.2上运行。

1 个答案:

答案 0 :(得分: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)