2016-08-30 53 views
0

我有這個疑問:ActiveRecord的unscope像PARAMS

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 

我可以簡單地unscope一個PARAMS如果它沒有設置:

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

但與此第二查詢我不能unscope與其中clausole:

if @f_cerca.blank? 
    filtri = filtri.unscope(where: :intervento) 
    end 

正如我在第一個查詢做

我想辦法可能是所有的轉換,其中clausole在「喜歡」,改變PARAMS在「%」,而不是unscope他們的......是有任何其他方式?

我該如何解決?

感謝所有

回答

0

我會使用多個where s,而不是unscoping。

首先查詢

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') 
+0

謝謝你,你的建議是好的一些安排! – EffeBi