这里几乎是一个菜鸟,所以我很感激有人可以提供的任何帮助。
我正在尝试通过 Sunspot 在我的网站上的搜索中添加分面。Ryan 刚刚发布了一个很棒的 Railscast,它让我开始了:http ://railscasts.com/episodes/278-search-with-sunspot 。我得到了这个工作,并且能够添加额外的方面。我的问题是这些方面是相互独立的。如果我在 3 个不同的属性上有 3 个方面,当我选择一个方面时,我已经选择了一个方面,我只想显示属于这两个方面的结果。到目前为止,它只是从一个方面切换到另一个方面。我觉得这不应该那么困难,但我不知道该怎么做。
我确实找到了本教程:http ://blog.upubly.com/2011/01/06/using-sunspot-in-your-views/ 我认为它正在做我想做的事。我试图让它工作,但即使我试图让它只在一个方面工作,我也没有列出任何结果。只是方面名称,然后没有其他内容。
想法?
谢谢!!
更新
这是我正在尝试做的代码示例:
调整 Railscasts 代码我得到了这个:
在我的样式控制器中:
def index
@search = Style.search do
fulltext params[:search]
facet :departmental, :seasonal, :classifier
with(:departmental, params[:department]) if params[:department].present?
with(:classifier, params[:classification]) if params[:classification].present?
with(:seasonal, params[:season]) if params[:season].present?
end
在我的样式索引视图中(我知道我需要压缩它)
= form_tag styles_path, :method => :get do
%p
= text_field_tag :search, params[:search]
= submit_tag "Search", :name => nil
#facets
%h4 Departments
%ul
- for row in @search.facet(:departmental).rows
%li
- if params[:department].blank?
= link_to row.value, :department => row.value
(#{row.count})
- else
%strong= row.value
(#{link_to "remove", :department => nil})
%h4 Classifications
%ul
- for row in @search.facet(:classifier).rows
%li
- if params[:classification].blank?
= link_to row.value, :classification => row.value
(#{row.count})
- else
%strong= row.value
(#{link_to "remove", :classification => nil})
%h4 Seasons
%ul
- for row in @search.facet(:seasonal).rows
%li
- if params[:season].blank?
= link_to row.value, :season => row.value
(#{row.count})
- else
%strong= row.value
(#{link_to "remove", :season => nil})
在我的风格模型中:
searchable do
text :number, :description, :department, :classification, :season
string :departmental
string :classifier
string :seasonal
end
def departmental
self.department
end
def classifier
self.classification
end
def seasonal
self.season
end
我的 upubly 代码版本,配对只是试图让“季节性”方面发挥作用:
我将 Search Partial、Search Model 和 SearchHelper 与示例中的相同。我试图弄乱 Helper,因为我的 Facets 将提取文本值,而不仅仅是其他模型的 ID,但无济于事。我没有将我的各种属性设置为单独的模型,因为我认为我不需要那个功能,但我开始不这么想了。
样式控制器:
def index
@title = "All styles"
@search = search = Search.new(params[:search]) # need to set local variable to pass into search method
@search.url = styles_path
@search.facets = [:seasonal]
@solr_search = Style.search do
keywords search.query
with(:seasonal, true)
search.facets.each do |item|
facet(item)
with(:seasonal, params[:season]) if params[:season].present?
end
any_of do
# filter by facets
search.facets.each do |item|
with(item).all_of( params[item].try(:split, "-") ) if params[item].present?
end
end
paginate(:page => params[:page], :per_page => 10)
end
再次感谢您的帮助。绝对是菜鸟,但真的很享受建立这个网站的过程。Stackoverflow 对我来说已经是一个巨大的帮助,所以我非常感谢所有在这里发布答案的人。