我想使用隐藏字段参数(colour_id)来细化搜索与特定颜色相关的织物。
面料有多种颜色、供应商和类别
但是,我希望搜索表单(colour_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 %>
您需要
通过将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