还在了解facet,但我想过滤没有分配相关记录的记录。首先是一些代码:
模特:
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>
该视图显示了一个类别过滤器列表及其各自的计数,但是,我想要包含一个&#34;未分配&#34; facet (及其计数),它将查询尚未分配类别的项目。这可能与方面有关吗?那么,&#34;分配任何&#34; facet(及其计数)过滤已分配任何类别的项目?谢谢。
答案 0 :(得分:2)
我知道你问这个问题已经有一段时间了。但我最近一直在使用rails / sunspot / solr,偶然发现了你的问题。希望你找到了答案,但如果没有,请按照我的说法进行操作。
分面是一种对当前搜索结果进行分类的方法。获得&#34;未分配&#34;的一种方法实现的方面是用它实际索引对象。
在您的项目模型中,我会将其更改为:
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
来获取类别名称。因为我已将可搜索的属性切换为字符串(并且出于显而易见的原因,您不能将:references
和row.instance
与字符串值一起使用!)我已经选择了使用category_name|category_id
类型字段的组合索引字段。如果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>