Rails で ToDo アプリをつくる⑧ (Rails 入門)

↓の続き

utouto97.hatenablog.com

今回やること

今回はフィルタリング機能を追加します。
ToDoの状態 (status) によってフィルタリングします。
すべて表示、In progressのみ、Completeのみ、の3パターンを実装します。

フィルタリング機能の追加

まずは,コントローラがパラメータをインスタンス変数に保存します。
indexアクションの中に追記してます。(pre_editアクションも)

@filter = params[:status]

次に、フィルタリングようのボタンを設置します。
現在のパラメータに応じて、デザインを変更します。

<div class="w-50 mx-auto">
  <%= link_to 'All', "/", method: :get,
    class: "mt-2 btn btn-"+(@filter == nil ? "" : "outline-") +"secondary" %>
  <%= link_to 'In progress', "/?status=In progress", method: :get,
    class: "mt-2 btn btn-"+(@filter == "In progress" ? "" : "outline-") +"secondary" %>
  <%= link_to 'Complete', "/?status=Complete", method: :get,
    class: "mt-2 btn btn-"+(@filter == "Complete" ? "" : "outline-") +"secondary" %>

最後に、コントローラでURLのパラメータをもとに、取得するToDo一覧にフィルタリングをかけます。
ストロングパラメータのpermitと条件指定のwhereを使って、絞り込みを実現しています。

@todos = Todo.order(:created_at, :id).where(params.permit(:status))

これで、ToDoの状態にもとづいたフィルタリングを実装できました。

終わり