Railsでタスク管理アプリを作成_6

# タスク管理アプリを作ってみよう(続き)

## 1. 前置き

### 1. 前提・事前作業

 * [こっちの投稿](http://qiita.com/fujimohige/items/44ef56f905411bb1476d)
 * 例によって[ドットインストール](http://dotinstall.com/lessons/basic_rails_v2/24901)の写経
 * [#18 データを削除しよう](http://dotinstall.com/lessons/basic_rails_v2/24918)から実施



## 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: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リンクが追加された。リンクを押下してみると確認メッセージが表示される。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/40160/1a5c9a38-95b2-fc3a-f779-b653f69aefac.png)

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/40160/1c207212-1995-d8c8-e353-4760bfcead80.png)


* `Destroy` Actionを作成する。
* `/home/vagrant/taskApp/app/Constollers` の `projects_constroller.rb` を弄る。

```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
```

* 削除できるようになった（↓削除結果）

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/40160/a9cddaf8-81b2-a74f-1d77-75085941d5a2.png)