用太阳黑子搜索铁轨

时间:2014-05-26 16:27:31

标签: ruby-on-rails ruby-on-rails-4 solr sunspot

我正在使用太阳黑子进行搜索,它工作正常,我已经实现了一个fecet搜索这是我对facet的看法

<% for row in @search.facet(:company_id).rows %>
  <li>
    <% if params[:company_id].blank? %>
      <%= link_to row.instance.name, :company_id => row.value %> <%= row.count %>
    <% else %>
      <strong><%= row.instance.name %></strong> (<%= link_to "remove", :month => nil %>)
    <% end %>
  </li>
<% end %> 

这是控制器

  def search

    @search = Sunspot.search(Job) do

        fulltext params[:query]
        with(:company_id, params[:company_id]) if params[:company_id].present?
        facet :company_id , :limit => 5
        paginate(page: params[:page], per_page: 10)

    end

    @jobs = @search.results


    respond_to do |format|
    format.html { render :action => "search" }
    end
  end

但不是在视图中使用link_to我想使用复选框来获得与此enter image description here类似的内容

我尝试过这个解决方案,但错误<%= check_box_tag row.instance.name, :company_id => row.value %> <%= row.count %>

2 个答案:

答案 0 :(得分:0)

我猜是使用复选框是因为你不想刷新页面。 这意味着您必须通过ajax提取此数据。

解决这个问题的一种方法是:

  1. 使用复选框
  2. 绑定refreshResults函数
  3. 在refreshResults函数中执行ajax查询并在rails操作中呈现部分,以提供更新的结果。
  4. ajax回调中的成功回调将更新页面上的结果div。
  5. 如果您认为这听起来像是针对您的问题的正确方法,则会添加更多详细信息和代码示例。

答案 1 :(得分:0)

您需要创建这样的简单表单:

<%= form_tag request.original_url, method: :get do %>
  <% for row in @search.facet(:company_id).rows %>
    <li> 
      <%= label nil, row.instance.name %>
      <%= check_box_tag 'company_ids[]', row.value, Array.wrap(params[:company_ids]).include?(row.value.to_s) %>         
      <%= row.count %>
    </li>
  <% end %> 
  <li> 
     <%= submit_tag 'Send' %>
  </li>
<% end %> 

并在控制器中修改搜索查询:

...
with(:company_ids, params[:company_ids]) if params[:company_ids].present?
...

如果需要以交互方式进行搜索,则需要在后端附加前端和json(或其他格式)响应中的ajax请求。