思考Sphinx显示选项

时间:2011-01-22 04:59:49

标签: ruby-on-rails ruby-on-rails-3 activerecord thinking-sphinx

好的,我有一个图形模型,我正在使用思维狮身人面像作为搜索工具。它运作良好,但我想在搜索结果页面上显示不同的模型..例如

我在我的Graphic模型中有这个

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 个答案:

答案 0 :(得分:4)

您还需要在Category和SubCategory模型中定义索引,然后您可以同时搜索所有三个:

@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

希望这可以为您提供有关如何解决问题的一些想法。

答案 1 :(得分:0)

只是缩短示例,你可以这样做:

控制器中的

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

在视图中

= render @results

应该调用每个模型的部分'graphic / _graphic.html.erb','categories / _category.html.erb'等等