私は最初のウェブサイトで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
私は1つのフィールドの検索にのみ関心があります。だから、スフィンクスを使用するのは残酷かもしれません。 – rps
フィールドのインデックスを作成しますか? '名前'フィールドの任意の単語で検索する場合や、スケーラビリティが必要な場合は、そのフィールドの単語のインデックスを保持する必要があります。それがスフィンクスが(他のものの中でも)何をするのかです。個々の単語にインデックスを付けずに検索したい場合は、その列のすべての単語を順番にスキャンして終了します。 –