RailsでGem等を使わず、余計なメソッドを作ったりもせずにとにかくシンプルに検索機能を実装する方法です。
今回はtitleというカラムを持つpostsテーブルを検索するという状況設定で話をします。
#フォームを作る
index.htmlに検索フォームを作ります。
検索はテーブルに変更を与えないため、form_tagを使用します。
view/index.html.erb
<%= form_tag('/search', :method => "get") do %>
<input type="text" name="keyword">
<input type="submit" value="検索">
<% end %>
}
#コントローラーに検索用のアクションを定義する
2行目で検索フォームから送信された値をkeywordというパラーメーターで受け取っています。
3行目ではtitleに@keywordを含む列を検索し、@postsに代入します。
posts_controller.rb
def search
@keyword = params[:keyword]
@posts = Post.where("title LIKE ?", "%#{@keyword}%")
end
#検索結果の表示
まず検索結果を表示するためのページをルーティングで設定します。
routes.rb
get 'search' => 'posts#search'
最後に検索結果を表示するためのhtml.erbファイルを作成します。
今回は適当に検索結果のtitleだけ表示します。
view/search.html.erb
<% @posts.each do |post| %>
<%= post.title %>
<% end %>