Искать с самоцветом ransack

Я показываю результат запроса в моем представлении, этот запрос использует две разные таблицы, и для поиска данных я использую драгоценный камень ransack для выполнения поиска, но он показывает мне следующую ошибку в форме поиска:

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

person jeff    schedule 24.04.2017    source источник


Ответы (1)


Во-первых, условно попробуйте называть столбец без прописных букв.

и нам нужна структура таблиц и моделей, чтобы дать лучший ответ, поэтому, пожалуйста, попробуйте добавить их к вопросу.

Но я постараюсь привести несколько кейсов, чтобы вы могли решить проблему.

если вы пытаетесь использовать отношение has_many, вы сначала вызовете это отношение во множественном числе, а затем столбец этой модели, например, если у пользователя много проектов, и мы хотим выполнить поиск по имени проекта, это будет похоже на это

 <%= f.search_field :projects_name_cont %>

если пользователь принадлежит учреждению, мы перейдем к единственному числу, а затем к столбцу модели, например

<%= f.search_field :institution_name_cont %>

и если мы попробуем использовать столбец в той же пользовательской модели, то он будет напрямую

 <%= f.search_field :name_cont %>

он перейдет непосредственно в столбец имени в пользовательской модели. надеюсь, что это поможет вам понять

person xploshioOn    schedule 24.04.2017
comment
Спасибо за ответ и большое спасибо за примеры, я понимаю вашу точку зрения, но в случае, если я хочу взять данные из запроса, выберите, где поле переименовано с помощью AS? Например из этой части :: select ([rutas] .Ruta AS ruta, [clientes] .IdCli AS Cliente) - person jeff; 25.04.2017