2011-10-24 7 views
0

私は最初のウェブサイトでRuby on Railsを使っています。このアイデアは栄養学の「検索エンジン」で、食品を検索してから、ウェブアプリでは、完全に一致しない場合は、その食品に関する栄養情報のページか検索結果のページに移動します。Railsでこのようにデータベース検索を実装するにはどうすればよいですか?

これまでは、栄養情報データベース(postgresqlを使用)を作成し、テストデータを追加しました。これはデータベース用の足場を作成するために使用したコマンドです。

rails generate scaffold Food name:string calories:decimal portion_name:string \ 
portion:decimal image_url:string description:text 

次に、インデックスページを作成しました。これは私がインデックスを作成するために使用されるコマンドです:

rails generate controller home index 

私はpublic/index.htmlを削除し、この行含むようにconfig/routes.rbを修正:この後

root :to => 'home#index' 

を、私はそうのように、app/views/home/index.html.erbに検索フォームを追加しました:今

<div id="search"> 
    <h1>How many calories are in... ?</h1> 
    <%= form_tag("/search", :method => "get") do %> 
    <%= text_field_tag "q", nil, :class => "span6" %> 
    <%= submit_tag("Go", :name => nil) %> 
<% end %> 

この検索フォームに接続して、検索クエリまたは一致するものに完全に一致する場合、ユーザーはその食品の情報を表示しているページに直接ルーティングされるようにします。完全一致がない場合は、ユーザーに結果のページが表示され、各結果の栄養ページへのリンクが表示されます。

この機能はどのように実装できますか?私はRailsで検索を実装するための記事を検索してみましたが、スクリーンキャストも見ましたが、私が見つけたリソースのどれも、私が望むものを実装していません。ここで

は、これまでのプロジェクトへのGitHubのリンクです:https://github.com/robertseaton/nutrition-project

答えて

0

私はRailsの中で検索するためThinking-Sphinxを使用する - Sphinxは、オープンソースの検索サーバーです。 Railsで検索を正しく動作させる方法を定義することができます。

+1

私は1つのフィールドの検索にのみ関心があります。だから、スフィンクスを使用するのは残酷かもしれません。 – rps

+0

フィールドのインデックスを作成しますか? '名前'フィールドの任意の単語で検索する場合や、スケーラビリティが必要な場合は、そのフィールドの単語のインデックスを保持する必要があります。それがスフィンクスが(他のものの中でも)何をするのかです。個々の単語にインデックスを付けずに検索したい場合は、その列のすべての単語を順番にスキャンして終了します。 –

0

太陽黒点を使用して、検索のニーズに対応することもできます。ここに太陽黒点https://github.com/sunspot/sunspotのギブスリンクがあります。

太陽黒点を使用すると、食べ物やカロリーなどのすべてのアイテムを検索できるようにすることができます。また、これらのアイテムにさまざまな重みを付けることができます。キーワード一致がある場合は、頂点で。

githubのsunspot wikiには、あなたが始めるための多くのリソースがあり、実装するのは非常に直感的です。

ありがとう、

関連する問題