2017-08-10 39 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" ....