Railsアプリに検索機能を実装する方法をメモしておこう
どうも、Linです。香辛料買いました。
Ruby on Railsのアプリで検索機能を実装したい時ってありますよね??
何を隠そう、ぼく自身も、どうしてもrailsアプリに検索機能を実装させてみたくなり、ググって検索機能のつけ方を探しまくりました。
その結果、
Rails4上でRailsチュートリアルの「簡単な検索フォーム」を実装する
という神のようなQiitaのページにたどり着くことができ、見事に自分のRailsアプリにも検索機能を実装することに成功したのです。
今日はその方法を忘れないうちにメモしておこうと思います。
ゼロベースでrailsアプリを作る段階から紹介します。
Step1. railsアプリを作る
まずは、rails newコマンドで新しいrailsアプリを作成しちゃいましょう。
今回は例として、「search」というアプリを作成してみます。
1 |
$rails new search |
Step2. Projectモデル作成
続いては、例としてProjectモデルを作成。
1 |
$cd search |
railsアプリ内のディレクトリに移動して、
1 |
$rails g scaffold Project name:string |
Projectモデルを作成します。
カラムはstring属性のnameのみで十分です。
scaffoldで作成されたマイグレーションファイルからデータベースを作成するために、
1 |
$rake db:migrate |
を唱えましょう。
これで一番簡単なrailsアプリが世の中に誕生しました。

Step3. モデルファイル編集
mode/project.rbのモデルファイルを下記のものに変更。
1 2 3 4 5 6 7 8 9 |
class Project < ActiveRecord::Base def self.search(search) #self.でクラスメソッドとしている if search # Controllerから渡されたパラメータが!= nilの場合は、titleカラムを部分一致検索 Project.where(['name LIKE ?', "%#{search}%"]) else Project.all #全て表示。 end end end |
意味はよくわからないのできかないでください笑
>>元ソース参考
Step4. 検索フォーム設置
続いては、検索できるフォームをrailsアプリ内に設置して行きます。
ぼくは個人的に、全てのページのナビゲーションに検索フォームを設置したかったので、
layout/application.html.erb
を編集。
この<body>から</body>内を次のように変更。
1 2 3 4 5 6 7 8 9 10 11 12 |
<body> <%= form_tag projects_path, :method => 'get' do %> <%# projects_pathはモデル名で読みかえること %> <p> <%= text_field_tag :search, params[:search] %> <%= submit_tag "Search", :name => nil %> </p> <% end %> <%= yield %> </body> |
すると、全てのrailsアプリ内のページに対して検索フォームが登場します。

Step5. コントローラー変更
最後にコントローラーを変更します。
projects_controller.rbを開いて、
indexアクションを次のように変更してください。
1 2 3 4 |
def index #ViewのFormで取得したパラメータをモデルに渡す @projects = Project.search(params[:search]) end |
これでファイル編集完了。
検索機能実装できましたね。
試しにrailsアプリで検索してみよう!
さて、railsアプリに検索機能は実装できているのでしょうか??
実際に検索してみましょう。それが一番手っ取り早いですね。
まず適当に、
- 海の幸
- 山の幸
というデータを登録してみます。

試しに、「山」と検索フォームで打って見ると、
本当に山がつくやつだけに絞られた!

すげえええじゃんw
ありがとうございました。Qiita。
それでは
Lin

おそらく、ブロガー。現在ホテル暮らしで全国フラフラしています。
ネット広告代理店に1年3ヶ月勤め上げ、独立をして丸4年が経ちました。今年でフリーランス 5年目。
質問・ご意見・相談があればLINEで受け付けていますのでお気軽にどうぞ 。
コメントを残す