2017-04-24 93 views
0

我在我的視圖中顯示查詢的結果,此查詢使用兩個不同的表和數據搜索我使用ransack gem執行搜索,但它顯示我在搜索中出現以下錯誤形式:使用搜索寶石搜索

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

字段「PRODUCTO」我從所謂的「PRODUCTOS」另一個表中獲取它,它是查詢的結果,那隻能說明我與另外一個,我等領域的錯誤在查詢中,而不是與我所調用的方法相同,即「Stoc」

這是我的方法控制器:

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

這是我的查詢:

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 

這是我的搜索形式:

<%= 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 %> 

回答

0

首先,按照慣例,嘗試不使用大寫字母來命名列。

我們需要表格和模型的結構來給出更好的答案,所以請嘗試將它們添加到問題中。

不過,我會盡量給你一些情況下,這樣你就可以解決這個問題

如果您正在使用的has_many關係嘗試,你會先打電話複數這種關係,然後該模型的列,例如,如果用戶有很多的項目,我們希望通過這個項目的名稱進行搜索,它會是這樣

<%= f.search_field :projects_name_cont %> 

如果用戶屬於一個機構,我們將與奇異,然後到列型號如下

<%= f.search_field :institution_name_cont %> 

,如果我們在同一個用戶模型一列嘗試,那麼這將是直接

<%= f.search_field :name_cont %> 

它會直接進入到用戶模型中的名稱列。希望這可以幫助你理解

+0

謝謝你的迴應,非常感謝你的例子,我理解你的觀點,但如果我想從查詢中獲取數據,請選擇字段被重命名爲「AS」 ?例如,從這部分:: select(「[rutas] .Ruta AS ruta,[clientes] .IdCli AS Cliente」) – luis31