2 flat logo on transparent 256
2018-06-13
2019-03-09

Ruby on Railsで検索機能を実装する|ransack

Search 31298

Ruby on Railsは様々機能を簡単に実装することができます。 今回はRuby on Railsの検索機能Gem:ransackを利用して 検索機能を実行します。

Ransackとは

ユーザーがリクエストした情報から、SQLを生成しデータの検索を行える Gemです。

Ruby on Rails4でも5でも利用可能です。

実装環境

Ruby on Rails 4系

Ruby 2.1系

GemにRansackを追加

Gemファイルに以下を追加し、インストールします。

gem 'ransack'

Controllerの設定

通常はIndexアクションに追加されます。 今回はArticlesControllerのindexアクションへ記載します。

class ArticlesController < ApplicationController

  def index
    @query = Article.ransack(params[:q])
    @articles = @query.paginate(page: params[:page], per_page: 20)
  end

@query は検索値を検索するインスタンス変数で

@articlesは検索値結果を表示するインスタンス変数です @articlesの.paginateはページネーションを実現するgemです。

ページネーションの設定方法は以下記事を御覧ください

Ruby on Rails でページネーションを設定する

Viewの設定

indexのViwへ設定します。

articles/index.html.erb

#フォームのパスは必ず変更してください。
<%search_form_for @query, url: dashboards_path %>
  <%# タイトルか記事のカラムを指定値で検索%>
  <%= f.label :title_or_content_cont, "タイトルor 記事 %>
  <%= f.search_field :title_or_content_cont %>

  <%# タイトルを指定値で検索%>
  <%= f.label :title_start, "タイトルor 記事 %>
  <%= f.search_field :title_start %>

<%= f.submit %>

#検索結果
<% @articles.each do |@article| %>
  <%= article.title %></td>

 <% end %>

例えば、or検索で指定値を検索したい場合は、以下の部分を変更する必要があります。

検索したいカラム_or_検索したいカラム_cont

1カラムを指定値で検索する場合は以下の通り変更する必要があります。

検索したいカラム_start 

もちろん完全一致検索なども対応可能です。 この部分については 公式ページを御覧ください

検索結果をソートする場合

テーブルなどで検索結果をソートする場合は ソートリンク機能を利用できます。

htmlをテーブル組みにして下記のように記載します。

<%= sort_link(@query, :title, 'タイトル', default_order: :desc) %>

※default_orderは省略可能

以上になります。

発展形はRansackとajax で検索結果を動的に表示する|Ruby on Rails5を御覧ください

その他関連記事

Ruby on Railsでデータベースカラムの追加と削除を行う

Ruby on Rails でデータを取得するメソッド一覧

Ruby on Rails4で簡易ブログを作成する1 | VIew Controller ルートを作成する

【初心者・独学者向け】Ruby on Railsで中間テーブルを作成し、多対多を実現する

Ruby on Railsのwhereで順序どおりに値を取得する

MySQLでテーブルをコピーする

前の記事
次の記事
人気記事
カテゴリーから記事を探す