2017-08-10 41 views
0

我需要排序記錄,我在單個表中使用了單個數據的ransack gem,但是當我在數據庫中使用涉及多個表的查詢時,我無法對其他表進行排序。使用查詢排序查詢

這是我的查詢:

def self.busqueda_rep_envases(params) 
    query = select("DevEnvases.ID, DevEnvases.CodCli AS Clave,C.Nombre as Responsable, C.NombreCorto as Nombre_Comercial,DevEnvases.Articulo,P.Producto,P1.Producto Envase,SUM(DevEnvases.Cantidad) Entregados,SUM(DevEnvases.Devuelto) Devueltos,SUM(DevEnvases.Cantidad)-SUM(DevEnvases.Devuelto) Saldo ") 
      .distinct 
      .joins('INNER JOIN Clientes C ON DevEnvases.CodCli=C.IdCli Inner Join Productos P ON DevEnvases.Articulo=P.Clave Inner Join Productos P1 ON DevEnvases.Envase=P1.Clave') 
      .where("(DevEnvases.Tipo = :Tipo_Env or :Tipo_Env = '') AND (DevEnvases.RutaId = :rutaId or :rutaId = '') AND (DevEnvases.DiaO = :diaO or :diaO = '') AND (DevEnvases.IdEmpresa = :idempresa)",{Tipo_Env: params[:Tipo_Env], rutaId: params[:search], diaO: params[:diaO], idempresa: params[:search6]}) 
      .group('DevEnvases.ID, DevEnvases.CodCli,C.Nombre,DevEnvases.Articulo,DevEnvases.Tipo,P.Producto,P1.Producto,C.NombreCorto') 

    query 
    end 

這是我在控制器方法:

def envases 
    @search = Devenvase.busqueda_rep_envases(params).search(search_params) 
    # make name the default sort column 
    @search.sorts = 'Clave' if @search.sorts.empty? 
    @envases = @search.result().page(params[:envases]).per(15) 
    end 

這是我的搜索形式:

<%= search_form_for @search, :remote=>"true", url: reportes_ruta_envases_path, :method => :get do |f| %> 
    <tr> 
    <th class="component_name_header_col"><%= sort_link @search, :Clave, "Clave","devenvase", {}, { :remote => true, :method => :get } %></th> 
    <th class="component_name_header_col"><%= sort_link @search, :Responsable, "Responsable","devenvase", {}, { :remote => true, :method => :get } %></th> 
    <th class="component_name_header_col"><%= sort_link @search, :Nombre_Comercial, "Nombre_Comercial","devenvase", {}, { :remote => true, :method => :get } %></th> 
    <th class="component_name_header_col"><%= sort_link @search, :Articulo, "Articulo","devenvase", {}, { :remote => true, :method => :get } %></th> 
    <th class="component_name_header_col"><%= sort_link @search, :Producto, "Producto","devenvase", {}, { :remote => true, :method => :get } %></th> 
    <th class="component_name_header_col"><%= sort_link @search, :Envase, "Envase","devenvase", {}, { :remote => true, :method => :get } %></th> 
    <th class="component_name_header_col"><%= sort_link @search, :Entregados, "Entregados","devenvase", {}, { :remote => true, :method => :get } %></th> 
    <th class="component_name_header_col"><%= sort_link @search, :Devueltos, "Devueltos","devenvase", {}, { :remote => true, :method => :get } %></th> 
    <th class="component_name_header_col"><%= sort_link @search, :Saldo, "Saldo","devenvase", {}, { :remote => true, :method => :get } %></th> 
    </tr> 
<% end %> 

有沒有辦法做到通過查詢排序與ransack?或者其他一些可以完成的寶石或方法?

回答

0

假設你已經在你的代碼(belongs_to的,的has_many等)定義的關聯, 那麼你加入到只是表名

  1. 變化:

    joins(:Clientes, :Productos, :Productos1).... 
    
  2. 變化排序PARAM至此

    <%= sort_link @search, :Clientes_Nombre, "Responsable" ....