Варианты отображения Thinking Sphinx - PullRequest
2 голосов
/ 22 января 2011

Хорошо, у меня есть графическая модель, и я использую мышление сфинкс в качестве инструмента поиска.Это работает хорошо, но я хочу отображать разные модели на странице результатов поиска .. например

У меня есть это в моей графической модели

define_index do
 indexes :name, :description, :scale, 
 indexes sub_category.name, :as => :subcategory_name
 indexes sub_category.category.name, :as => :category_name
 indexes colors.name, :as => :color_name
end

Это хорошо и хорошо, но проблема в том,Я хочу отобразить все категории и подкатегории для найденного поиска, а не только графику, которая связана.В моем контроллере, если у меня есть три находки типа

@graphics = Graphic.search params[:search]
@categories = Categories.search params[:search]
@sub_categories = SubCategories.search params[:search]

, это выглядит как перебор ... есть ли лучший способ, чтобы в представлении я мог показать каждый из них отдельно

Ответы [ 2 ]

4 голосов
/ 22 января 2011

Вам также понадобятся индексы, определенные в ваших моделях категорий и подкатегорий, а затем вы сможете выполнять поиск по всем трем сразу:

@results = ThinkingSphinx.search params[:search], :page => params[:page]

По вашему мнению, вам понадобится логика вокруг каждого результата поиска для отображения правильного HTML - возможно, у вас могут быть разные партиалы для каждого класса? Я также рекомендовал бы обернуть это в помощника. Вот начало:

<ul>
  <% @results.each do |result| %>
    <li><%= render :partial => partial_for_search_result(result),
              :locals => {:result => result} %></li>
  <% end %>
</ul>

И помощник:

def partial_for_search_result(result)
  case result
  when Graphic
    'graphics/search_result'
  when Category
    'categories/search_result'
  when SubCategory
    'sub_categories/search_result'
  else
    raise "Unknown search result/partial mapping for #{result.class}"
  end
end

Надеюсь, это даст вам некоторые идеи о том, как подойти к проблеме.

0 голосов
/ 26 июня 2014

Просто, чтобы сократить пример, вы можете сделать:

в контроллере

@results = ThinkingSphinx.search params[:search], :page => params[:page]

в поле зрения

= render @results

должен вызывать каждую модель частично 'graphic / _graphic.html.erb', 'category / _category.html.erb' и т. Д.

...