Rails で ToDo アプリをつくる⑧ (Rails 入門)
↓の続き
今回やること
今回はフィルタリング機能を追加します。
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の状態にもとづいたフィルタリングを実装できました。
終わり