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'
- 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によって結果を得ています。
def index
@q = Person.ransack(params[:q])
@people = @q.result(distinct: true)
end
viewは以下のようになります。
search_form_forヘルパーと検索パラメータqを利用しています。
search_fieldが検索対象となるフィールドです。
<%= 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日
Author And Source
この問題について(ransackまとめ), 我々は、より多くの情報をここで見つけました https://qiita.com/akilax/items/b5c59e11b5dd4cc72164著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .