【rails】タスクテーブルにタイトル、開始終了日時を追加する
本日はタスクテーブルにタイトル、開始日時、終了日時を追加していこうと思います。
tasksテーブルのカラムはcontentのみで寂しかったので、これで少し充実させます。
では、早速本日のお品書きです。
本日やること
- tasksテーブルにtitle、start_date、end_dateを追加する
- title、start_date、end_dateを登録できるようにする
ちなみに追加したカラムの表示は次回で。
次回予定
- タスク一覧でtitleを表示させる
- タスク個別ページで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
ストロングパラメータの詳細については別記事でも解説しています。
これでカラム追加と登録まで可能になりました。おつかれさまでした。
次回登録したカラムを表示させる処理について解説したいと思います。
まとめ
本日の解説を簡単にまとめます。
- カラムを追加(title、start_date、end_date)
- カラム登録を可能に(text_field、datetime_select)
- 日本時刻設定(timezone)
- ストロングパラメータを修正(permit)
あとがき
記事を書き終わってから、tasksテーブルをtaskテーブルと間違って表記していることに気づいた。railsでは単数・複数が大事なので間違えないようにしないと。