我有这个问题:
filtri = Interventi.where(chiuso: @f_stato, id: @array_int, cliente_id: @f_cliente, categoria: @f_categoria, intervento: @f_cerca).paginate(:page => params[:page]).order('id DESC')
if @f_cliente.blank?
filtri = filtri.unscope(where: :cliente_id)
end
如果未设置参数,我可以简单地解开它:
if @f_stato.blank?
filtri = filtri.unscope(where: :chiuso)
end
我需要添加一个搜索参数,所以我需要一个'喜欢'条件:
@f_cerca = params[:search] if params[:search]
filtri = Interventi.where('chiuso = ? AND id = ? AND cliente_id = ? AND categoria = ? AND intervento like ?', @f_stato, @array_int, @f_cliente, @f_categoria, @f_cerca).paginate(:page => params[:page]).order('id DESC')
但是对于第二个查询,我无法取消使用以下内容的clausole:
if @f_cerca.blank?
filtri = filtri.unscope(where: :intervento)
end
正如我在第一次查询中所做的那样
我认为一种方法可能是将所有clausole转换为'like'并改变'%'中的params而不是取消它们......它还有其他方法吗?
我该如何解决?
感谢所有
答案 0 :(得分:0)
我会使用多个where
而不是取消隐藏。
第一次查询
filtri = Interventi.where(chiuso: @f_stato, id: @array_int, categoria: @f_categoria, intervento: @f_cerca)
if @f_cliente.present?
filtri = filtri.where(cliente_id: @f_cliente)
end
filtri = filtri.paginate(:page => params[:page]).order('id DESC')
第二次查询
@f_cerca = params[:search]
filtri = Interventi.where('chiuso = ? AND id = ? AND cliente_id = ? AND categoria = ?', @f_stato, @array_int, @f_cliente, @f_categoria)
if @f_cerca.present
filtri = filtri.where('intervento like ?', @f_cerca)
end
filtri = filtri.paginate(:page => params[:page]).order('id DESC')