2012-03-05 23 views
0

私は現在、単語を入力できる基本検索をしており、その検索のようなすべてのレコードを返します。続くように、それは次のとおりです。私は今、けれども行いたい何複数のキーワード検索

application.html.erb

 <%= form_tag games_path, :method => 'get' do %> 
      <%= hidden_field_tag :direction, params[:direction] %> 
      <%= hidden_field_tag :sort, params[:sort] %> 
      <%= text_field_tag :search, params[:search] %> 
     <%= submit_tag t('.searchb'), :game_name => nil %> 
     <% end %> 

コントローラとモデル

 @games = Game.search(params[:search]) 

    def self.search(search) 
    search = search.to_s.strip.split 
    search.inject(scoped) do |combined_scope, search| 
    combined_scope.where(['game_name LIKE ? OR genre LIKE ? OR console LIKE ?', "%#{search}%", "%#{search}%", "%#{search}%"]) 
    end 
    end 

は、検索バーにして複数の単語を入力する機能ですそれを持っているレコードではなく、関連するすべてのレコードをその言葉に戻すようにしてください。

私が戦闘をタイプすると、アクションは

すべての戦闘ゲームとすべてのアクションゲームを返すようにしたい。

これを実装するにはどうすればよいですか? モデル:あなたは、キーワードを取るループして、これを達成するためのクエリを作成する必要が

EDIT

答えて

1

これはSphinxのような全文検索エンジンを使用する必要があります。 RubyとSphinxサーバーの間のインターフェイスを提供するthinking-sphinxと呼ばれる宝石があります!唯一の欠点は、データベースを定期的に更新する必要があることです。それは、ライブアップデートをサポートしません。

+0

私は、宝石を使用しないオプションを望んでいました:/私はレールをもっとよく理解できるので、コードを書く方が良いでしょうか?私はモデルのセクション(コントローラーの行の下に添付)で上記を更新しました。私はそれが罰金ですが、1つの単語を入力した場合、2つを入力すると、どちらかを持つすべてのレコードではなく、2つの単語を持つレコードを検索しようとします。 – user1222136

+0

あなたはMySQL関数http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.htmlを使って独自のフルテキスト検索を実装することができますが、それはルビーの方法ではありません。あなたが宝石が何をしているか知っていれば、宝石を使用することは悪くない。スフィンクスは補充検索用のデーモンであり、思考用のスフィンクスはこのデーモンを使用するインターフェイスです。あなたは両方のことについて多くのことを読むことができます。私はyur自身の検索メカニズムを書いていても意味がありません! – davidb

0

。注射を使用して簡単にすることができます。 Thisが役に立ちます。

+0

ちょっと私は私のモデルで何を持っているかを示しています(一番上の行はコントローラーのものです)。私はそれを行いました。例えば、 'border'とタイプすると関連するゲームを返しますが、 '(2つのゲーム名)、レコードを返しません。何か案が? – user1222136

関連する問題