pictweet作成 part3

Pictweet 削除機能

Destroyアクションを使用

以下の様な流れで設定を行う

1、ツイートを削除するためのルーティングを設定する

2、削除ボタンをビューに追加する

3、Destroyアクションをコントローラーに定義する

4、削除後のビューを追加する

 

1、routes.rbにdestroyアクションを定義する

resources :tweets, only: [:index, :new, :create, :destroy]

 

2、link_toメソッドを使用して削除ボタンをindex.html.erbに追加

削除するツイートを区別するために削除ボタンのパスにはツイートidをパラメータとして持たせる

httpメソッドはDELETEというメソッドを指定

<div class="more">
        <span><%= image_tag 'arrow_top.png' %></span>
        <ul class="more_list">
          <li>
            <%= link_to '削除', "/tweets/#{tweet.id}", method: :delete %>
          </li>
        </ul>
      </div>

 

*Prefixを用いて遷移先を設定する

Prefix:パスの指定方法の一つ

# Prefix未使用
<%= link_to "link_button", '/', class: "header__title--text" %>

# Prefix使用
<%= link_to "link_button", root_path, class: "header__title--text" %>

rails routesでprefixという文字がありその配下に出てくるがこのprefix名に続けて_pathという記述を付け加える

 

 <%= link_to '削除', tweet_path(tweet.id), method: :delete %

今回はdestoryアクションに対するprefixがtweetということがわかる

なのでtweet_pathとする

またprefixを使用するときは”/tweets/#{tweet.id}と記述してそれぞれのツイートid(tweet/id)が入る様にする

 

3、destroyアクションをコントローラーに定義する

2までを行うとボタン削除ボタンが現れるがクリックしてもエラーが出る

これはdestoryアクションが定義さえれていないため

 

Tweetsコントローラーにdestroyアクションを以下のように定義する

 

def destroy

tweet = Tweet.find(params[:id])

tweet.destroy

end

 

処理の流れとしてはまずパラメーターを受け取ったparams[:id]をもとに削除したいツイートをfindメソッドを用いて取得

そのツイートをdestroyメソッドで削除

 

4、削除完了画面のビューを作成

Tweetsディレクトリ中にビューファイルdestroy.html.erbを作成し以下のように記述

 

<div class="contents row">
  <div class="success">
    <h3>削除が完了しました。</h3>
    <a class="btn" href="/">投稿一覧へ戻る</a>
  </div>
</div>