ギークなエンジニアを目指す男

機械学習系の知識を蓄えようとするブログ

Ruby on railsでタスクアプリを作成してみる~モデルの追加~

f:id:taxa_program:20170724224720p:plain

今日はモデルの追加を行います。

前回から少し進んでおりますので、途中部分はドットインストールを参照下さい。

新規モデル追加

作成しているタスクアプリも終盤(?)にさしかかって来ました。

プロジェクトの追加、編集、削除は実装できたので、
プロジェクト単位にタスクを登録できるようにしていこうと思います。

現在の画面はこんな感じです。

f:id:taxa_program:20170805121131p:plain

プロジェクトをクリックすると、詳細画面に遷移しますが、
この中でタスク表示等していきたいと思います。

下記コマンドでモデルの追加を行います。

$ 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の説明はここにまとめています。

taxa-program.hatenablog.com

コントローラの作成

続いて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

これで関連付けができました。