Rails tutorialにユーザー検索を追加する

 

 検索フォームの実装

今回はRails tutorialで作成したアプリにユーザーの検索機能を実装した。

初めにgem 'ransack'をbundle install

controllerの実装

def index
@users = User.paginate(page: params[:page])
@search = User.ransack(params[:q])
@result = @search.result.paginate(page: params[:page])
end

 

formの実装

<%= search_form_for @search do |f| %>

<%= f.label :name_cont %>
<%= f.search_field :name_cont, class: "form-control"%>

<%= f.submit "Search", class: "btn btn-primary" %>
<% end %>

 

viewの実装(初期)

<% if @result.present? %>
<ul class="users">
<%= render @result %>
</ul>
<% else %>
<ul class="users">
<%= render @users %>
</ul>
<% end %>

ただ、かなり長くリファクタリングの余地があると感じ、改めて考えてみた。

 

viewの実装(リファクタリング後)

<ul class="users">
<%= render @result.present? ? @result : @users %>
</ul>

renderに渡すものは、ユーザーオブジェクトの集合体。
そうする事で、_user.html.erbを探しに行ってくれる。という事は、三項演算子を使う事でかなりコンパクトにかけるのでは?という流れで実装を思いついた。

 

今回はSimplemodeでの実装だったので簡易だが、Advanced modeとなると複雑になってくるので使用した際再度まとめようと感じた。

 

参考:

GitHub - activerecord-hackery/ransack: Object-based searching.