我想使用隐藏字段参数(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 %>
答案 0 :(得分: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