2017-04-24 4 views
0

Ich zeige das Ergebnis einer Abfrage in meiner Ansicht, verwendet diese Abfrage zwei verschiedene Tabellen und für die Datensuche verwende ich die Ransack-Edelstein, um die Suche durchzuführen, aber es zeigt mir den folgenden Fehler in der Suche Form:Suche mit ransack gem

ActionView::Template::Error (undefined method `Producto_cont' for Ransack::Search<class: Stoc, base: Grouping <combinator: and>>:Ransack::Search): 

das Feld „Producto“ ich habe es aus einer anderen Tabelle mit dem Namen „Productos“ bin immer und es ist das Ergebnis der Abfrage, es zeigt mir nur den Fehler mit den Feldern des anderen, die ich bin in Bezug auf die Abfrage und nicht mit der, die ich von der Methode, die es ist "Stoc" ruft

Dies ist mein Methodencontroller:

@search = Stoc.productos_de_un_stock(params).search(search_params) 
@search.sorts = 'Stock desc' if @search.sorts.empty? 
@stock = @search.result().page(params[:stock]).per(15) 

das ist meine Frage:

def self.productos_de_un_stock(params) 
     query = select("[stock].IdStock, [stock].Stock, [productos].Clave AS Clave_producto, [productos].Producto, [productosxpzas].PzaXCja AS PzaXCja") 
       .joins('inner join productos ON stock.Articulo = productos.Clave inner join productosxpzas ON productos.Clave = productosxpzas.Producto') 
       .where('stock.Ruta = ? AND stock.IdEmpresa = ?', (params[:search]), (params[:search6])) 

     query 
    end 

das ist mein Suchformular:

<%= search_form_for @search, :remote=>"true", url: busqueda_stock_path, :method => :get do |f| %> 
    <div class="rwd"> 
     <table class="table table-striped table-bordered table-condensed table-hover rwd_auto"> 
     <thead> 
      <tr> 
      <th class="component_name_header_col"><%= sort_link @search, :Articulo, "Clave","stoc", {}, { :remote => true, :method => :get } %></th> 

      <th class="action_col"><%= t("basic.action") %></th> 
      </tr> 
      <tr> 
      <th><%= f.text_field :Articulo_cont, class:"campo" %></th> 
      <%= f.search_field :Producto_cont %> 
       <input id="search" type="hidden" value="<%=params[:search] %>" name="search"/> 
      <input id="search6" type="hidden" value="<%=params[:search6] %>" name="search6"/> 


      <th><%= f.submit "Buscar" %></th> 
      </tr> 

     </thead> 
     <tbody> 

     </tbody> 
     </table> 
    </div> 
    <% end %> 

Antwort

0

Erstens durch Konvention, versuchen Sie die Spalte ohne Großbuchstaben zu nennen.

und wir brauchen die Struktur der Tabellen und Modelle, um bessere Antwort zu geben, also bitte versuchen Sie, sie zu der Frage hinzuzufügen.

Aber ich werde versuchen, Ihnen einige Fälle zu geben, damit Sie das Problem lösen kann

wenn Sie mit einem has_many Beziehung versuchen, werden Sie zuerst, dass die Beziehung in mehreren anrufen und dann die Spalte dieses Modells, zum Beispiel wenn ein Benutzer viele Projekte haben, und wir wollen durch den Namen des Projekts suchen, wird es wie dieser

<%= f.search_field :projects_name_cont %> 

sein, wenn der Benutzer zu einer Institution gehört, werden wir mit singulären gehen und dann auf die Spalte das Modell, so

<%= f.search_field :institution_name_cont %> 

und wenn wir mit einer Säule in dem gleichen Benutzermodell versuchen, dann wird es direkt sein

<%= f.search_field :name_cont %> 

es direkt an die Namensspalte in dem Benutzermodell gehen. hoffe, dass dies hilft Ihnen zu verstehen

+0

Vielen Dank für die Antwort und vielen Dank für die Beispiele, ich verstehe Ihren Punkt, aber wenn ich die Daten aus der Abfrage nehmen möchte wählen Sie, wo das Feld mit einem "AS" umbenannt wird ? Zum Beispiel aus diesem Teil :: select ("[rutas] .Ruta AS ruta, [Klient] .IdCli AS Cliente") – luis31

Verwandte Themen