Ruby on Rails: ツイート削除...chapter8
-----------------------------------やったこと-----------------------------------------
①ルーティングを編集
②コントローラーを編集
③ビューを編集
④ビューの確認
---------------------------------------------------------------------------------------
今日はツイートを削除できるように実装していこうと思います。
自分で考えながら実装し、わからなくなったらGoogle先生に頼っていくスタイルでいくのでよろしくお願いします!
①ルーティングを編集
削除のHTTP動詞はdelete。
右のアクションの指定は削除機能をtweetsコントローラーのdestroyアクションの方で記述していくのでtweets#destroy。
pathはツイートを一件一件消すのでidをパラメーターとして取得しなければならないので、tweets/:id。
②コントローラーを編集
app/controllers/tweets_controller.rb
TweetモデルからDBへアクセスしてコントローラーに渡すので、Tweetモデルを指定。
ツイートのidを取得しないとどのツイートを削除すればいいかわからないのでfindメソッドで検索し、paramsを使ってidを取得する。
今回は削除なのでビューに何かを映したいというわけではないので、インスタンス変数を使わないでただの変数を使ってtweetに代入。
destroyメソッドで先ほど代入した削除したいツイートのレコード(行)を削除できるらしい。
参照:https://pikawaka.com/rails/destory
③ビューを編集
今回は詳細ページから削除できるようにしたいと思うので、open.html.erbを編集。
app/views/open.html.erb
link_toを使って実装。
pathはroutes.rbで指定したように#{}(式展開)を使用。
式展開に書く内容は詳細を作る時にopenアクションで書いた処理内容で情報を渡したインスタンス変数(@open_tweet)。
このインスタンス変数にはidも入ってるので、@open_tweet.idでidを取得しpathしてる。
ここで 注意!!!
link_toはデフォルトではHTTP動詞は 'get' なのでmethod: でdeleteを指定!
ちなみにmethodを指定しないでやってみると。。。
ビュー見る限り一見できてそうだが、削除を押して一覧へ戻るを押すと。。。
消せてない!!!
だからまた詳細へ行けちゃう!!!
https://gyazo.com/33a22e8fb3b3c9a0322020ac128928ee
さて、設定を戻しておきます。
④ビューの確認
できてるかビューで確認してみる。
https://gyazo.com/7d5d239120e3d3c91abfc5d9211d3b06
削除できてる!
↓gifが見れない方は画像でどうぞ!(gifではタイトル1の内容を削除してますが、画像ではタイトル2の方を削除してます。)
詳細へ飛んで。。。
削除を押して一覧へ戻るを押して削除されてるか確認。
なくなってる!削除できた!
今回はツイートを削除する機能を実装しました。
今回実装してる時気付いたのですが、このツイート機能には欠陥がありますw
次回で直していこうと思います。
以上です。