arm*_*ing 6 solr ruby-on-rails facet sunspot
这里几乎是一个noobie,所以我感谢任何人可以给予的帮助.
我正试图通过太阳黑子在我的网站上添加分面.Ryan刚刚发布了一个很棒的Railscast,它让我开始:http://railscasts.com/episodes/278-search-with-sunspot.我得到了它的工作,并能够添加其他方面.我的问题是方面彼此独立.如果我在3个不同的属性上有3个方面,当我选择了一个已经选中的方面时,我想只显示落入这两个方面的结果.截至目前,它只是从一个方面切换到另一个方面.我觉得这应该不是那么困难,但我无法弄清楚如何去做.
我确实找到了这个教程:http://blog.upubly.com/2011/01/06/using-sunspot-in-your-views/ 我觉得这样做我想要的.我试图让这个工作,但是,即使我试图让它只用一个方面工作,我没有列出任何结果.只是小平面名称,然后没有别的.
思考?
谢谢!!
UPDATE
以下是我要做的代码示例:
调整Railscasts代码我得到了这个:
在我的StylesController中:
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
Run Code Online (Sandbox Code Playgroud)
在我的样式索引视图中(我知道我需要浓缩这个)
= 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})
Run Code Online (Sandbox Code Playgroud)
在我的风格模型中:
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
Run Code Online (Sandbox Code Playgroud)
我的版本的upubly代码配对,只是试图让"季节性"方面工作:
我离开搜索部分,搜索模型和SearchHelper与示例中的相同.我试图弄乱Helper,因为我的Facets将提取文本值,而不仅仅是其他模型的ID,但无济于事.我没有将各种属性设置为单独的模型,因为我认为我不需要这些功能,但我开始认为不是这样.
StylesController:
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
Run Code Online (Sandbox Code Playgroud)
我再次感谢你的帮助.绝对是一个菜鸟,但真正享受建立这个网站的过程.Stackoverflow对我来说已经是一个巨大的帮助,所以我欠每个在这里发布答案的人都非常感谢你.
我自己需要这个问题的答案,并且鉴于网络上似乎没有其他相关内容,我决定自己尝试找出答案。
首先,我通过逻辑得出结论,控制器可以处理多个方面,并且没有理由不能,我记得 ruby 最好的部分是它是最人类可读的代码,尝试阅读你的第一个控制器,然后你'你会发现它确实有效。我通过在 url 中手动输入查询字符串来对此进行测试,该字符串返回了预期结果。因此,一旦我弄清楚了这一点,我就知道问题出在我的观点上(这让我捂脸,因为现在已经相当明显了)
你的例子比我的要复杂得多,我的答案可能不能100%满足所有要求,但我很确定它已经接近了。另外,在我看来,您模型中有关“部门”等的代码有点多余
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
Run Code Online (Sandbox Code Playgroud)
%h4 Departments
%ul
- for row in @search.facet(:departmental).rows
%li
- if params[:department].blank?
= link_to row.value, styles_path(
:department => row.value,
:classification => (params[:classification] unless params[:season].blank?),
:season => (params[:season] unless params[:season].blank?))
(#{row.count})
- else
%strong= row.value
= link_to "remove", styles_path(
:department => nil,
:classification => (params[:classification] unless params[:season].blank?),
:season => (params[:season] unless params[:season].blank?))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5231 次 |
| 最近记录: |