我在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上运行。
答案 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)