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>