2

私はグラフィックモデルを持っており、検索ツールとしてsphinxを考えています。例Thinking 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 

これを持っている。これは、罰金と良いのですが、問題は、私が表示したい..ですそれはうまく動作しますが、私は、検索結果ページ上の異なるモデルを表示したいです関連するグラフィックだけでなく、検索された検索のすべてのカテゴリとサブカテゴリ。私のコントローラでは、私は3が、これはやり過ぎのように思える...ビューで私は別々に

答えて

4

あなたは、インデックスを持っている必要がありますそれらのそれぞれを表示することができますので、より良い方法はあり

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

のように見つける必要があります同様にあなたのカテゴリおよびサブカテゴリモデルで定義され、その後、あなたが一度にすべての3つの間で検索することができます:あなたのビューで

@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 'など

関連する問題