В значительной степени нуби здесь, поэтому я ценю любую помощь, которую кто-то может оказать.
Я пытаюсь добавить фасетку к поиску на моем сайте через Sunspot.Райан только что выпустил отличный Railscast, который заставил меня начать: http://railscasts.com/episodes/278-search-with-sunspot. Я получил эту работу и смог добавить дополнительные аспекты.Моя проблема в том, что грани не зависят друг от друга.Если у меня есть 3 фасета по 3 различным атрибутам, когда я выбираю фасет один раз, который у меня уже есть, я хотел бы отображать только результаты, попадающие в оба этих фасета.На данный момент он просто переключается с одного аспекта на другой.Я чувствую, что это не должно быть так сложно, но я не могу понять, как это сделать.
Я нашел этот урок: http://blog.upubly.com/2011/01/06/using-sunspot-in-your-views/, который, я думаю, делает то, что я хочу.Я пытался заставить это работать, но даже когда я пытаюсь заставить это работать только с одним аспектом, у меня нет никаких результатов в списке.Только имя аспекта и ничего больше.
Мысли?
Спасибо !!
ОБНОВЛЕНИЕ
Вот примеры кода того, что я пытаюсь сделать:
Настройка кода 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
В моем представлении индекса стиля (я знаю, что мне нужно сжать это)
= 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 в паре, чтобы просто попытаться заставить работать "сезонный" фасет:
Я оставил частичный поиск,Модель поиска и SearchHelper такие же, как в примере.Я пытался связываться с Помощником, поскольку мои Фасеты будут извлекать текстовые значения, а не только идентификаторы других Моделей, но безрезультатно.У меня нет различных атрибутов, настроенных как отдельные модели, так как я не думал, что мне нужна эта функциональность, но я начинаю думать иначе.
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
СноваЯ ценю помощь.Определенно нуб, но действительно наслаждаюсь процессом создания этого сайта.Stackoverflow уже был ОГРОМНОЙ помощью для меня, поэтому я благодарен всем, кто публикует здесь ответы, большое спасибо.