#タスクモデルのひな形を作成する
・モデル作成のための便利なジェネレータを使う
#bin/rails g model [モデル名] [属性名:データ型 属性名:データ型 …] [オプション]
$ bin/rails g model Task name:srtring description:text
コマンドを実行すると、モデルのクラスファイル、マイグレーションファイル、モデルの自動テストのファイルのひな形が自動作成される、
生成されるものの種類 | 本筋でのファイルパス | 用途 |
---|---|---|
モデルクラスのソースコード | app/models/task.rb | Taskクラスの実装 |
マイグレーションファイル | db/migrate/20210825131759_create_tass.rb | データベースにtasksテーブルを追加する |
モデルの自動テスト | test/models/task_test.rb | Taskクラスについての自動テストの実装 |
モデルの自動テストで使うfixtureファイル | test/fixtures/tasks.yml | Taskクラスについての自動テストのためのデータ投入の定義 |
#データベースにテーブルを追加する
・データベースにテーブルを追加するには、Railsの用意しているマイグレーションという仕組みを使う。
・generatorでTaskモデルを作成した際に作成されたdb/migrate/xxxxxxxxxxxxxx_create_tasks.rbは必要最低限の要件を満たしているので、このままマイグレーションを実行して、データベースにtasksテーブルを追加する。
class CreateTasks < ActiveRecord::Migration[5.2]
def change
create_table :tasks do |t| →#tasksというテーブルを作る
t.string :name →#tasksというテーブルがnameのカラムを備えること
t.text :description →#tasksというテーブルがdescritionのカラムを備えること
t.timestamps →#打刻ようのカラムを持つこと
end
end
end
#データベースにtaskテーブルを追加
% bin/rails db migrate
#このファイルはクラスを定義している
class Task < ApplicationRecord
end
#コントローラーとビュー
コントローラやビューのひな形もジェネレータで作成することができる
#コントローラを作成する書式→bin/rails g controller コントローラー名 [アクション名 アクション名 …] [オプション]
$ bin/rails g controller tasks index show new edit
・アプリケーションは、URLとHTTPメソッドの組み合わせから、リクエストを処理すべきコントローラーとアクションを特定して(※この特定処理を「ルーティング」と呼ぶ)、特定したアクションに処理をさせ、結果のHTTPレスポンスを作ってプラウ座に返す。
###URLとHTTPメソッド
①リクエストを処理するコントローラとアクションは、ブラウザからのリクエストに含まれるURLとHTTPメソッドによって決定される。
②コントローラのアクションを設計する際には、入り口となるURLとHTTPメソッドを合わせて考える必要がある。
・controllerジェネレータでアクションを指定すると、アクションと同名のビューも一緒に作ってくれます。
・HTTPメソッドがGETのアクションは同名のビューを使うことが多いので、HTTPメソッドがGETとなるアクション名をジェネレータコマンドの引数として指定するのが効率的。
・controllerジェネレータコマンドを実行すると「index」「show」「new」「edit」のアクションについて個別のルーティングを追加する。
・CRUDというよくあるパターンは、パターン通りのルーティングを一括で設定したいので、config/routes.rbから4つのアクションについての設定を消す。
#ここから消す
get 'tasks/index'
get 'tasks/show'
get 'tasks/new'
get 'tasks/edit'
#ここまで
#代わりに「resouces」メソッドを追加
resouces :tasks
#resourcesメソッドは(index,show,new,create,edit,update,destroy)に関するルーティングを一括で設定してくれる。
・アプリケーションの玄関口(ルートパス)にアクセスした時に、Railsのデフォルト画面ではなくタスク一覧が表示されるようにする
#追加
root to: 'tasks#index'
追加した結果のroutes.rb
Rails.application.routes.draw do
root to: 'tasks#index'
resources :tasks
end