はじめに
Railsの勉強としてgem周りを触ってみる企画です。
今回は・・・
を試してみようかと思います。
どういうgemなの?
簡単にいうと検索機能を実装する時に使えるgemです。
使う機会は結構ありそうなので、覚えるためにも試していきましょう。
検証環境
以下の環境で実施しました。
[client]
・MacOS Mojave(10.14.2)
・Vagrant 2.2.2
・VBoxManage 6.0.0
[virtual]
・CentOS 7.6
・Rails 5.2.2
・ruby 2.3.1
ご参考までに。
ransack導入
1.gemのインストール
事前にRails勉強用に作成したプロジェクトで進めます。
各MVCは適当に掲示板アプリを想定してPostsコントローラーなどを生成済みです。
(index,show,editの空ページが見れる程度)
$ rails g model post
$ rails g controller posts index show edit
その前提のもと、Gemfileに以下を追記。
# ransack
gem 'ransack'
追記したらインストール。
$ bundle install
-----------
Fetching ransack 2.1.1
Installing ransack 2.1.1
-----------
→無事に完了。
2.ransackを使ってみる
早速ransackを使って実装してみます。
(※DBには事前にダミーデータを適当に複数件突っ込んでます。)
def index
# ransack
@search = Post.ransack(params[:q])
@posts = @search.result
end
<h1>Posts#index</h1>
<p>Find me in app/views/posts/index.html.erb</p>
<%= search_form_for @search, url: posts_index_path do |f| %>
<%= f.label :name_cont, '名前' %>
<%= f.search_field :name_cont %>
<%= f.submit '検索' %>
<% end %>
<table>
<thead>
<tr>
<th><%= sort_link(@search, :name) -%></th>
<th><%= sort_link(@search, :content) -%></th>
</tr>
</thead>
<tbody>
<% @posts.each do |post| %>
<tr>
<td><%= post.name -%></td>
<td><%= post.content -%></td>
</tr>
<% end %>
</tbody>
</table>
3.動作確認
ではサーバーを立ち上げてページを見てみましょう。
このように有象無象のデータ群に対して
"hanako"で検索をかけるとしっかりと絞り込みが出来ました!
「Name」と「Content」のソートもポチっと押すと、
ちゃんとソートされているようです。
完成!
所感
何かしらのデータを一覧画面で表示するシステムは、
こういった検索機能は基本的にワンセットなことが多いですね。
手作業でロジックを組むと大変&工数も無駄にかかってしまうので、
gemを活用していきたいと思います!
おわりに
何かお気づきの点がありましたら、
ご指摘やアドバイス等頂けると大変助かります!