ransackまとめ


ransackまとめ

検索機能の実装に使われることの多いransackについて自分なりにgithubを読んでまとめてみた。

ransackとは

Ransack enables the creation of both simple and advanced search forms for your Ruby on Rails application (demo source code here).

ransackは簡単なフォームや応用的なフォームをRuby on Railsで作ることを可能にします。

まずransackをインストール

gem 'ransack'
  1. The default param key for search params is now :q

1.検索パラメータのデフォルトでのパラメータのキーは:qとなっています。

2.form_for is now search_form_for

現在はform_forではなくsearch_form_forを用いています。

3.you will get your search results (an ActiveRecord::Relation in the case of the ActiveRecord adapter) via a call to Ransack#result.

検索結果はresultメソッドを呼び出すことで取得することができます。

以上のことをもとにコントローラーを作成してみます。

検索パラメータ:qを用いて検索を行い、
その後.resultによって結果を得ています。

controller.rb
def index
  @q = Person.ransack(params[:q])
  @people = @q.result(distinct: true)
end

viewは以下のようになります。
search_form_forヘルパーと検索パラメータqを利用しています。
search_fieldが検索対象となるフィールドです。

form.html
<%= search_form_for @q do |f| %>

  # Search if the name field contains...
  <%= f.label :name_cont %>
  <%= f.search_field :name_cont %>

  # Search if an associated articles.title starts with...
  <%= f.label :articles_title_start %>
  <%= f.search_field :articles_title_start %>

  # Attributes may be chained. Search multiple attributes for one value...
  <%= f.label :name_or_description_or_email_or_articles_title_cont %>
  <%= f.search_field :name_or_description_or_email_or_articles_title_cont %>

  <%= f.submit %>
<% end %>

上の例では<%= f.search_field :name_cont %>
というようにnameの後に_contと書かれていました。
これはnameに部分一致するものを探しています。そのほかにはどんなものがあるかを
いくつか挙げてみました。

検索方法 意味
*_eq 等しい
*not_eq 異なる
*_lt より小さい
*_lteq 以下
*_gt より大きい
*_gteq 以上
*_cont 部分一致
*_start *で始まる
*_end *で終わる

機能としてはまだまだあるのですが今日はこんなところで、
英語を読むのは疲れるな...

一人前のエンジニアになるまであと78日