タスク管理アプリを作ってみよう(続き)
1. 前置き
1. 前提・事前作業
- こっちの投稿
- 例によってドットインストールの写経
- #18 データを削除しようから実施
2. データを削除しよう
- 削除機能を追加
- Homeに削除リンクを追加する
-
rake routes
の内容に従い定義する(destroy
Actionを作成する)
$ rake routes
Prefix Verb URI Pattern Controller#Action
projects GET /projects(.:format) projects#index
POST /projects(.:format) projects#create
new_project GET /projects/new(.:format) projects#new
edit_project GET /projects/:id/edit(.:format) projects#edit
project GET /projects/:id(.:format) projects#show
PATCH /projects/:id(.:format) projects#update
PUT /projects/:id(.:format) projects#update
DELETE /projects/:id(.:format) projects#destroy
root GET / projects#index
-
/home/vagrant/taskApp/app/Views/projects
のindex.html.erb
を弄る。
ERB
<h1>Projects</h1>
<ul>
<% @projects.each do |project| %>
<li>
<!-- 登録情報参照ページへのリンク -->
<%= link_to project.title, project_path(project.id) %>
<!-- 編集ページへのリンク -->
<%= link_to "[Edit]", edit_project_path(project.id) %>
<!-- 削除リンク -->
<!-- methodにdeleteを指定することで、Destroyアクションと紐づけられる -->
<!-- dataで確認メッセージを指定 -->
<%= link_to "[Delete]", project_path(project.id), method: :delete, data: {confirm: "are you sure?"} %>
</li>
<% end %>
</ul>
<p><%= link_to "Add New", new_project_path %></p>
- Deleteリンクが追加された。リンクを押下してみると確認メッセージが表示される。
-
Destroy
Actionを作成する。 -
/home/vagrant/taskApp/app/Constollers
のprojects_constroller.rb
を弄る。
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
# editアクションを追加
def edit
@project = Project.find(params[:id])
end
# updateアクションを追加
def update
@project = Project.find(params[:id])
if @project.update(project_params)
redirect_to projects_path
else
render 'edit'
end
end
# Destroyアクションを追加
def destroy
@project = Project.find(params[:id])
# 削除
@project.destroy
# Homeへリダイレクト
redirect_to projects_path
end
# project_params を定義
private
def project_params
# projectでわたってきたもののうち、titleだけ使用
params[:project].permit(:title)
end
end
- 削除できるようになった(↓削除結果)