迷い人

日々勉強。勉強の先に何か見つかるといいなぁ

【rails】タスクテーブルにタイトル、開始終了日時を追加する

本日はタスクテーブルにタイトル、開始日時、終了日時を追加していこうと思います。

 

tasksテーブルのカラムはcontentのみで寂しかったので、これで少し充実させます。

 

 

では、早速本日のお品書きです。

 

本日やること

  1. tasksテーブルにtitle、start_date、end_dateを追加する
  2. title、start_date、end_dateを登録できるようにする

 

ちなみに追加したカラムの表示は次回で。

 

次回予定

  1. タスク一覧でtitleを表示させる
  2. タスク個別ページでtitle、content、start_date、end_dateを表示させる

 

では、カラム追加から解説していきます。

 

1.tasksテーブルにtitle、start_date、end_dateを追加する

 以下のコマンドで必要なカラムを追加します。

 

$rails g migration AddTitleToTasks title:string start_date:datetime start_end:datetime

 

これで以下のようなマイグレーションファイルが作成され、問題なければマイグレートします。マイグレーションファイルの場所はdb/migrate/2019********.rb

 

class AddTitleToTasks < ActiveRecord::Migration[5.2]
  def change
    add_column :tasks, :title, :string
    add_column :tasks, :start_date, :datetime
    add_column :tasks, :end_date, :datetime
  end
end

 

以下のコマンドでマイグレート。

 

$rails db:migrate

 

これでtasksテーブルは以下のカラムを持つことになりました。

  • id
  • title  new!
  • content
  • start_date  new!
  • end_date  new!
  • user_id
  • created_at
  • updated_at

 

2.title、start_date、end_dateを登録できるようにする

 

続いて、新たに追加したカラムに値を登録するため、タスク登録画面を修正します。

修正するファイル名はviews/tasks/_form.html.erbになります。

 

views/tasks/_form.html.erb

<%= form_with(model: task, local: true) do |form| %> #省略 #titleを登録 <div class="field"> <%= form.label :title %> <%= form.text_field :title %> </div> <div class="field"> <%= form.label :content %> <%= form.text_area :content %> </div> #start_dateを登録 <div class="field"> <%= form.label :start_date %> <%= form.datetime_select :start_date %> </div> #end_dateを登録 <div class="field"> <%= form.label :end_date %> <%= form.datetime_select :end_date %> </div> <div class="actions"> <%= form.submit %> </div> <% end %>

 

datetime_selectを使うことで、日時をセレクトボックスで選ぶことができるようになります。

 

また今回から日時を使うことになるので、設定を日本時間に変更します。修正するファイルはconfig/application.rbです

 

config/application.rb

module TaskManage class Application < Rails::Application #省略 #time_zoneを東京に設定 config.time_zone = 'Tokyo' end end

 

 次にストロングパラメータを修正し、新たに追加したカラムをtasksテーブルに登録できるようにします。修正するのはcontrollers/task_controller.rbです。

 

controllers/task_controller.rb

class TasksController < ApplicationController before_action :set_task, only: [:show, :edit, :update, :destroy] #省略 private #省略 def task_params params.require(:task).permit(:content, :title, :start_date, :end_date).merge(user_id: current_user.id) end end

 

ストロングパラメータの詳細については別記事でも解説しています。

 

oyaoya1123.hatenablog.com

 

これでカラム追加と登録まで可能になりました。おつかれさまでした。

 

次回登録したカラムを表示させる処理について解説したいと思います。

 

まとめ

本日の解説を簡単にまとめます。

  • カラムを追加(title、start_date、end_date)
  • カラム登録を可能に(text_field、datetime_select)
  • 日本時刻設定(timezone)
  • ストロングパラメータを修正(permit)

 

あとがき

記事を書き終わってから、tasksテーブルをtaskテーブルと間違って表記していることに気づいた。railsでは単数・複数が大事なので間違えないようにしないと。