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.