備忘録としてあげさせていただきました。
目的
- CRUDのD(DELETE)を体験
- データの操作で基本的な処理となる「削除」を理解
- destroyアクションを理解
- Prefix
削除機能
7つのアクションのうち、削除機能はdestroyが該当
実装の流れ
- ツイートを削除するためのルーティングを設定
- 削除ボタンをビューに追加
- destroyアクションをコントローラーに定義する
destroyアクションのルーティング設定
config/routes.rb
resources :tweets, only: [:index, :new, :create, :destroy]
削除ボタンを投稿一覧に追加
linl_to
mメソッドを使い、削除ボタンを追加
削除ボタンのパスには **ツイートのid**を パラメーターとして持たせる
/tweets/《tweetのid》というパスにすると、パラメーターとして受け取ることができる
HTTP: DELETE メソッド
「data:{turbo_method::delete
app/views/tweets/index.html.erb
<span><%= image_tag 'arrow_top.png' %></span>
<%= link_to '削除', "/tweets/#{tweet.id}", data: { turbo_method: :delete } %>
image_tag
imgタグを生成するためのRailsのヘルパーメソッド.。第一引数にapp/assets/images配下、もしくは、public配下の画像を指定
<span><%= image_tag 'arrow_top.png' %></span>
=> <span><img src="assets/arrow_top.png" /></span>
link_tおの遷移先をPrefixで指定
Prefixとは?
ルーティングのURI Pattern
に名前をつけて変化させたもの
ターミナルのrails routes
コマンドを実行したら見れる
このPrefix名に続けて_path
と記述を付け加えることによって、URI Pattern
のパス値して認識される
'/'
=> root_path
Preixを用いて遷移先を設定
app/views/tweets/index.html.erb
<%= link_to '削除', tweet_path(tweet.id), data: { turbo_method: :delete } %>
destroyアクションをコントローラに定義
ツイートを削除する際にはモデルのdestroyメソッド使用
params[:id]
を使用し、削除したいツイートの情報を取得
この時のparams[:id]
は先ほどPrefixで指定したパスであるtweet_path(tweet.id)
の
tweet/id
に当たる数字が入ります
def destroy
tweet = Tweet.find(params[:id])
tweet.destroy
redirect_to root_path
end
ビューにツイート情報を受け渡さないので、インスタンス変数ではなくただの変数として置く
処理の流れ
パラメータとして受け取ったparams[:id]
を元に、削除したいツイートをfind
メソッドを用いて取得します
そして、そのツイートをdestroy
メソッドで削除する。
削除した後はトップ画面を表示するためにredirect_to
メソッドを使用している