Rails で ToDo アプリをつくる⑤ (Rails 入門)
↓の続きです。
今回やること
今回は、CRUD の U をやっていきます。
ただし、ToDoの編集ではなく、ToDoの状態(status)を変更できるようにしていきます。
現在、'In progress' と 'Complete' の2状態あります。
これらを交互にトグルできるようにします。
基本的にやっていくことは前回と同じです。
ルーティングの設定、コントローラーのアクション追加、ビューを編集といった流れになります。
ルーティングの設定
まず、ルーティングの設定を行います。
以下を追記します。
put '/:id' => 'todos#toggle'
ここでは、PUTメソッドを使いました。
正直なところ、PUTメソッドとPATCHメソッドの使い分けが難しいです。
コントローラーのアクション追加
続いて、コントローラーのアクションを追加します。
ルーティングで設定したtoggle
アクションを追加します。
def toggle @id = params[:id] @todo = Todo.find(@id) new_status = @todo.status == 'In progress' ? 'Complete' : 'In progress' @todo.update(status: new_status) redirect_to :action => 'index' end
パラメータからidを取得し、対応するToDoを検索します。
あとは、update
メソッドで状態(status)を更新し、indexにリダイレクトしています。
ボタンの追加(ビューの編集)
完了(Complete)ボタンや完了取り消し(Cancel)ボタンは追加していなかったので、ここで追加していきます。
ビューファイルに追記していきます。
<%= link_to (todo.status == 'In progress' ? 'Complete' : 'Cancel'), "/#{todo.id}", method: :put, class: "btn btn-" + (todo.status == 'In progress' ? 'info' : 'secondary') %>
ここでも、Railsのlink_to
を使って書いています。
また、Bootstrapによる装飾も行っています。
これで、ToDoの状態を変更するボタンとその処理を追加できました。
終わり