タスク管理アプリを作ってみよう(続き)
1. 前置き
1. 前提・事前作業
- こっちの投稿の内容を事前に実施済み
- 例によってドットインストールの写経
- #13 データを保存してみようから実施
2. データを保存してみよう
- POSTして
projects#create
というActionで登録する -
/home/vagrant/taskApp/app/controllers
のprojects_controller.rb
を弄る。
ruby(before)
class ProjectsController < ApplicationController
# indexアクションを追加
def index
# @をつけた変数はviewでそのまま使用可能
# Projectの全データを引っ張ってくる
@projects = Project.all
end
# showアクションを追加
def show
@project = Project.find(params[:id])
end
# newアクションを追加
def new
@project = Project.new
end
end
ruby(after)
class ProjectsController < ApplicationController
# indexアクションを追加
def index
# @をつけた変数はviewでそのまま使用可能
# Projectの全データを引っ張ってくる
@projects = Project.all
end
# showアクションを追加
def show
@project = Project.find(params[:id])
end
# newアクションを追加
def new
@project = Project.new
end
# createアクションを追加
def create
# Formからの入力値を受け取る
@project = Project.new(project_params)
# データの保存
@project.save
# HOMEへ移動
redirect_to projects_path
end
# project_params を定義
private
def project_params
# projectでわたってきたもののうち、titleだけ使用
params[:project].permit(:title)
end
end
↓入力してボタンをポチる
3. Validationを設定しよう
- データの追加時にチェックを行う
- Modelの中でバリデーションを行う
-
/home/vagrant/taskApp/app/Models
のproject.rb
を弄る。
ruby(before)
class Project < ActiveRecord::Base
end
ruby(after)
class Project < ActiveRecord::Base
# 必須制御
# 「project」を未入力の状態では保存できなくなる
validates :title, presence: true
end
- 上記の場合、未入力の状態では保存はされないがエラーメッセージの表示が出来ないので、Controllerでエラー制御を追加する。
-
/home/vagrant/taskApp/app/controllers
のprojects_controller.rb
を弄る。 - ソースが長くなってきたのでbefore, afterでは書かない。
ruby
class ProjectsController < ApplicationController
# indexアクションを追加
def index
# @をつけた変数はviewでそのまま使用可能
# Projectの全データを引っ張ってくる
@projects = Project.all
end
# showアクションを追加
def show
@project = Project.find(params[:id])
end
# newアクションを追加
def new
@project = Project.new
end
# createアクションを追加
def create
# Formからの入力値を受け取る
@project = Project.new(project_params)
# データの保存
if @project.save
# saveがtrueだったらHOMEへ移動
redirect_to projects_path
else
# saveがfalseだったら入力フォームに戻る
render 'new'
end
end
# project_params を定義
private
def project_params
# projectでわたってきたもののうち、titleだけ使用
params[:project].permit(:title)
end
end
- これで、下記の制御となる。
- 保存成功 --> HOMEへ移動
- 保存失敗 --> 入力フォームを再表示