今日はモデルの追加を行います。
前回から少し進んでおりますので、途中部分はドットインストールを参照下さい。
新規モデル追加
作成しているタスクアプリも終盤(?)にさしかかって来ました。
プロジェクトの追加、編集、削除は実装できたので、
プロジェクト単位にタスクを登録できるようにしていこうと思います。
現在の画面はこんな感じです。
プロジェクトをクリックすると、詳細画面に遷移しますが、
この中でタスク表示等していきたいと思います。
下記コマンドでモデルの追加を行います。
$ rails g model Task title done:boolean project:references > invoke active_record > create db/migrate/20170805031316_create_tasks.rb > create app/models/task.rb > invoke test_unit > create test/models/task_test.rb > create test/fixtures/tasks.yml
Taskというモデルを、Title, done という項目を持たせて作成します。
また、projectのモデルを参照するように宣言しています。
モデルへのデフォルト値設定
作成した done はboolean型で宣言したので、デフォルト値を設定したいです。 taskapp/db/migrate/20170805031316_create_tasks.rb
class CreateTasks < ActiveRecord::Migration[5.1] def change create_table :tasks do |t| t.string :title t.boolean :done, default: false t.references :project, foreign_key: true t.timestamps end end end
「default: false」と追記することで、新規登録時には初期値としてfalseが設定されます。
モデルを元にDBにテーブルを作成
あとはおなじみのコマンドで、作成したモデルの内容をDBに反映させます。
$ rake db:migrate
migrateの説明はここにまとめています。
コントローラの作成
続いてTaskのコントローラの作成です。
$ rails g controller Tasks
この辺りはもう慣れて来ました。
TaskとProjectの関連付け
最後にtaskとprojectの紐付けを行います。
taskapp/app/models/project.rb
class Project < ApplicationRecord # projectが1に対して、taskは複数紐づく has_many :tasks # エラー条件を設定する validates :title, presence: { message: "入力してください" }, length: { minimum: 3, message: "短すぎます"} end
これで関連付けができました。