activerecord unscope就像params

时间:2016-08-30 18:56:34

标签: ruby-on-rails activerecord

我有这个问题:

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而不是取消它们......它还有其他方法吗?

我该如何解决?

感谢所有

1 个答案:

答案 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')