【问题标题】:Rails + Sunspot: "Unassigned" facet for filtering records that don't have an association assigned?Rails + Sunspot:用于过滤未分配关联的记录的“未分配”方面?
【发布时间】:2011-11-08 20:08:50
【问题描述】:

仍在学习构面,但我想过滤没有分配关联记录的记录。首先是一些代码:

型号:

class Project < ActiveRecord::Base
  belongs_to :category

  searchable do
    text :name
    integer :category_id, :references => Category
  end
end

控制器:

class ProjectsController < ApplicationController
  def index
    @search = Project.search do
      fulltext params[:q]
      facet :category_id
      with(:category_id, params[:category_id]) if params[:category_id].present?
    end
    @projects = @search.results
    respond_with(@projects)
  end

观点:

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

视图显示类别过滤器及其各自计数的列表,但是,我想包含一个“未分配”方面(及其计数),它将查询尚未分配类别的项目.这可能与方面有关吗?此外,过滤已分配 any 类别的项目的“Assigned any”方面(及其计数)怎么样?谢谢。

【问题讨论】:

    标签: ruby-on-rails sunspot faceted-search


    【解决方案1】:

    我知道你问这个问题已经有一段时间了。但我最近一直在使用 rails/sunspot/solr,偶然发现了你的问题。希望您找到了答案,但如果没有,我会这样做。

    构面是对当前搜索结果进行分类的一种方式。实现“未分配”方面的一种方法是用它实际索引对象。

    在您的项目模型中,我会将其更改为:

    class Project < ActiveRecord::Base
      belongs_to :category
    
      searchable do
        text :name
        string :category_name do
          category_id.present? ? (category.name + "|" + category_id.to_s) : "Unassigned"
        end
      end
    end
    

    我看到您在视图中使用row.instance.name 来获取类别名称。因为我已将可搜索属性切换为字符串(出于显而易见的原因,您不能将:referencesrow.instance 与字符串值一起使用!)我选择使用@987654325 的组合来索引该字段@ 类型字段。如果Project 没有category_id,则使用字符串"Unassigned"

    现在我们更改搜索块中的代码以反映或模拟更改。

    class ProjectsController < ApplicationController
      def index
        @search = Project.search do
          fulltext params[:q]
          facet :category_name
          with(:category_name, params[:category_name]) if params[:category_name].present?
        end
        @projects = @search.results
        respond_with(@projects)
      end
    

    视图代码也发生了变化:

    <ul>
      <% for row in @search.facet(:category_name).rows %>
        <li>
          <% if params[:category_name].blank? %>
            <%= link_to (row.value.include? '|') ? row.value.split('|')[0] : row.value, :category_name => row.value %> (<%= row.count %>)
          <% else %>
            <strong><%= row.value %></strong> (<%= link_to "remove", :category_name => nil %>)
          <% end %>
        </li>
      <% end %>
    </ul>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多