0

我想使用隐藏字段参数(colour_id)来优化我对与特定颜色相关的面料的搜索。

面料有多种颜色、供应商和类别

但是,我希望搜索表单(color_ids)中隐藏字段的参数过滤织物,以便仅搜索与这些颜色相关的织物。

从我收集到的最好的方法是在我的搜索中添加范围,并将这些隐藏字段的参数传递给范围,以将搜索结果缩小到仅与这些颜色相关联的面料。

我的面料模型看起来像这样

class Fabric < ActiveRecord::Base
  has_many :fabric_categories
  has_many :categories, :through => :fabric_categories
  has_many :suppliers, :through => :fabric_suppliers
  has_many :fabric_suppliers
  has_many :colours, :through => :fabric_colours
  has_many :fabric_colours


  # solr search method
  searchable do
  text :name, :boost => 5
  text :description
  text :categories do
    categories.map(&:name)
  end
  text :suppliers, :boost => 2 do
   suppliers.map(&:name)
   end
  end

我的控制器

  class FabricsController < ApplicationController

  def index
    @search = Fabric.search do
    fulltext params[:search]

     #scoped assets
     @fabrics = @search.results

和我的看法

  <%= form_tag fabrics_path, :method => :get, :class => 'form-search'  do %>
    <%= text_field_tag :search, params[:search], :class => 'query', id: "auto_complete", :placeholder => '', :autocomplete => "off" %>
    <div id="colour_ids">
      <%= hidden_field_tag :colour_1 %>
    </div>
    <%= submit_tag "Search", :name => nil, :class => 'btn', :id => 'search_button' %>
  <% end %>
4

1 回答 1

1

您需要将 category_ids 添加到索引中,方法是将其包含在您的searchable块中:

searchable do
  ...
  integer :colour_ids, :multiple => true do
    colours.map(&:id)
  end
end

执行此操作后,您将需要重新索引。

然后在您的查询中,您需要在以下内容中包含条件FabricsController#index

@search = Fabric.search do
  fulltext params[:search]
  with :colour_ids, params[:colour_1]
end
于 2012-06-18T18:18:53.960 回答