2

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

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

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] 

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

ответ

4

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

@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

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

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

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

ввиду

= render @results 

следует называть каждую модель частичного 'графический/_graphic.html.erb', ' Категории/_category.html.erb 'и т. д.