RailsでToDoサービスを作ろう(第6回)〜カンバンの「ToDo、Doing、Done」にする 〜

にゅ~ぶる
にゅ~ぶる

こんにちは、にゅ〜ぶるです。

こんにちは〜、ぶるこだよ〜💕

ぶるこ
ぶるこ
にゅ~ぶる
にゅ~ぶる

さて、第6回目ですね!前回は、こちら
今日は、「カンバンの「ToDo、Doing、Done」にする」について、進めていきたいと思います!

カンバンって?

ぶるこ
ぶるこ
にゅ~ぶる
にゅ~ぶる

作業(タスク)の状態を「ToDo」「Doing」「Done」という3つに分割し、情報カードや付箋紙に書いて貼り付けて管理する方法があって、それをカンバンって言うんだ。

今回は、その状態3つを管理する項目を追加するよ。

にゅ~ぶる
にゅ~ぶる

それでは早速、カラム(status)を追加しましょう。
状態を数値で管理するので、Integer型を使います。

rails generate migration AddStatusToTask status:integer
にゅ~ぶる
にゅ~ぶる

いつもの通り、DBを操作するmigrateファイルが作成されますので、
rails db:migrateだね!

rails db:migrate
にゅ~ぶる
にゅ~ぶる

では次は、Enumと言う機能を使って、statusの設定をしましょう。

class Task < ApplicationRecord
  belongs_to :user

  enum status: { todo: 0, doing: 1, done: 2 }
end
にゅ~ぶる
にゅ~ぶる

次に、各Viewに追加したstatusを追加しましょう。

答え(例)を書いておきますが、自分でできる方は、まずは見ずにやってみてください。

show.html.erb

<p>
  <strong>Status:</strong>
  <%= @task.status %>
</p>

index.html.erb

<th><%= sort_link(@q, :status) %></th>

<td><%= task.status %></td>

_form.html.erb

<div class="field">
<%= form.label :status %>
<%= form.select :status, Task.statuses.keys %>
</div>
にゅ~ぶる
にゅ~ぶる

Enumを使った場合、select-optionのvalueをEnumのkeyにする必要があります。
そのため、「Task.statuses.keys」を使うことで、次のようなHTMLを生成します。

<select name="task[status]" id="task_status">
  <option value="todo">todo</option>
  <option selected="selected" value="doing">doing</option>
  <option value="done">done</option>
</select>

え?これだけ??

ぶるこ
ぶるこ
にゅ~ぶる
にゅ~ぶる

そうね。
valueは数値の方が正しいんじゃないの?って思うかもですが、これでいいんです。そこからEmunがよしなにしてくれるので。

すごぉい💕

ぶるこ
ぶるこ
にゅ~ぶる
にゅ~ぶる

Viewを追加したら、ControllerのStrongParameterに追加する必要がありますね。

def task_params
  params.require(:task).permit(:title, :content, :deadline, :user_id, :status)
end
にゅ~ぶる
にゅ~ぶる

追加が出来たら、画面で動かして確認してみましょう。

にゅ~ぶる
にゅ~ぶる

Statusの項目が追加されていますね!

にゅ~ぶる
にゅ~ぶる

これで完成!
今回のようなステータスなど、1つの項目でいろんな状態を表したい場合などにはEnumを使うと便利ですので、是非使ってみてくださいね!

にゅ~ぶる
にゅ~ぶる

今回はここまでだよ。お疲れ様でした!
次回は、「Railsでのデバッグ(byebug)とおまけでbetter_errors」お楽しみにっ!!

次回で最終回だね💕

ぶるこ
ぶるこ

最後まで読んでくれてありがとうございました!

現在、Railsのチュートリアル的な感じで、
「Todoサービスを作る!」をテーマにお送りしております。
アジェンダは、こちら

質問等ありましたら、コメントなりTwitterなりで頂ければ対応させて頂きますので、遠慮なく利用くださいね。