Ruby on Rails: チャットグループの詳細ページ、編集、削除機能の実装...chapter14
今日やりたいこと
・チャットグループの詳細ページの作成
・チャットグループ編集機能の実装
・チャットグループ削除機能の実装
この3つをやろうと思います。
最初にチャットグループの詳細ページを作成します。
①チャットグループの詳細ページの作成
1.コントローラーの編集
app/controllers/chat_groups_controller.rb
ChatGroupモデルを使用し、params[:id]を使用しchat_groupsテーブルからidを探してチャットグループ情報を取得。
@を変数につけてインスタンス変数にして@chat_groupに取得したチャットグループ情報を代入。
2.詳細ページの作成
app/views/chat_groups/show.html.erbを作成。
↓
https://gyazo.com/08889858d742773eb9528663d6bd8e20
チャットグループの説明
もしchat_groupsテーブルのchat_group_description(グループの説明)カラムが空欄なら。。。
説明を表示してください。
それ以外なら(説明文がない場合)。。。
『説明文はありません。』と表示してください。
if文終了してください。
3.詳細ページの確認
/説明文がない場合
//説明文がある場合
②チャットグループ編集機能の実装
現在一覧ページは↑のようになっています。
メンバーカウント数の横に編集リンクを作りたいと思います。
そして、編集フォームに保存されているグループ名と説明をフォームに表示させるようにしたいと思います。
1.編集リンクを作成
一覧ページに編集リンクをつけていきます。
$rails routes
edit_chat_group GET /chat_groups/:id/edit(.:format) chat_groups#edit
↓
app/views/index.html.erb
↓
http://localhost:3000/chat_groups
2.コントローラーの編集
app/controllers/chat_groups_controller.rb
editアクション
先ほどの詳細ページ(showメソッド)と同じ処理。
今回はインスタンス変数を@edit_chat_groupとしました。
updateアクション
チャットグループを探し、変数update_chat_groupへ情報を代入。
編集して送られてきた情報をストロングパラメーター(chat_group_paramsメソッド内)にかけている情報だけを通す。
そしてupdateメソッドを使用し、内容を更新してDBへ保存。
3.編集ページの作成
app/views/chat_groups/edit.html.erbを作成
↓
https://gyazo.com/07ac61e8b45b19496f41dcaabefefa48
form_withのデフォルトHTTP動詞は'post'なので、methodでpatchを指定。
url
PATCH /chat_groups/:id(.:format) chat_groups#update
$rails routesで確認。
url: '/chat_groups/#{@edit_chat_group.id}'
これでupdateアクションへ行けそうです。
↓
チャットグループ一覧ページから[編集]をクリック。
↓
これを編集してみます。
↓
これで編集するボタンをクリックし、一覧ページへ戻ってみると。。。
↓
詳細ページ:
大丈夫そうです。
③チャットグループ削除機能の実装
最後にチャットグループを削除できるようにしていきます。
1.コントローラーを編集
チャットグループを探して、destroyメソッドで削除を指示。
↓
2.削除リンクを貼る
編集の横に削除パスを貼ります。
$rails routes
DELETE /chat_groups/:id(.:format) chat_groups#destroy
パス先は"/chat_group/#{list.id}"。
↓
3.ビューの編集
app/views/chat_groups/index.html.erb
link_toのデフォルトHTTP動詞は'get'なので methodを使用して'delete'と指定。
↓
4.確認
http://localhost:3000/chat_groups
削除できるかやってみます。
グループ3を削除してみます。
↓
[削除]をクリック
↓
http://localhost:3000/chat_groups
削除できてます。
今回は過去の復習でした。
昔だったら時間をかけて作っていたと思いますが、今回はすらすら作成できました😄
以上です。