AI任せのWeb開発奮闘記【第96話】コメント削除エラーの克服!動的UIの限界に挑む

TAKA:
「老師、コメント投稿機能がようやくリロードなしで動くようになりました!でも……コメント削除がエラーになるんです。」

AI老師:
「うむ、次の課題が見えてきたようじゃな。コメント削除時のエラー内容を確認したかの?」

TAKA:
「はい、ログを見るとこんな感じです。ObjectId が絡んでいるようで……。」

AI老師:
「その推測は正しいぞ。ObjectId はMongoDBが生成するユニークな識別子じゃが、そのままではJSON形式で処理できぬ。削除機能が正しく動かない原因もこれじゃろうな。」

  1. エラー内容を分解して理解する

TAKA:
「ということは、削除時にエラーが起きるのは、ObjectId が文字列として処理されていないからですか?」

AI老師:
「その通りじゃ。ObjectId を文字列に変換して扱う必要がある。おぬし、先ほどコメント投稿時には ObjectId を文字列に変換していたな?」

TAKA:
「はい!投稿時には str(ObjectId()) を使って変換しました。でも削除では気にしていませんでした。」

AI老師:
「よし、その問題に気づけたのは大きな進歩じゃ。次に、削除処理を修正していこうか。」

  1. app.py の削除処理を修正する

AI老師:
「まずは app.py の削除処理を見直すぞ。削除時に渡されるコメントIDが文字列であることを想定し、比較も文字列で行うようにするのじゃ。」

修正後のコード例を示します。

@app.route(‘/video//comment//delete’, methods=[‘POST’])
@login_required
def delete_comment(video_id, comment_id):
video = videos.find_one({‘video_id’: video_id})
if video:
# コメントIDを文字列として比較
updated_comments = [comment for comment in video[‘comments’] if comment[‘_id’] != comment_id]
videos.update_one({‘video_id’: video_id}, {‘$set’: {‘comments’: updated_comments}})
return jsonify({‘success’: True}) # JSONで成功レスポンスを返す
return jsonify({‘success’: False}), 404 # エラー時のレスポンス

  1. フロントエンドの修正

AI老師:
「次に、フロントエンドの削除処理がサーバーからのレスポンスを正しく受け取るように調整するぞ。」

video_detail.html の修正例を示します。

  1. 実行とテスト

TAKA:
「これで動くようになったはず……早速テストしてみます!」

AI老師:
「うむ、テストでは以下を確認するのじゃ。」

リロードなしでコメントが削除されること
削除後のコメントリストが正しく更新されること
エラーハンドリングが動作すること

TAKA:
「老師、動きました!削除してもエラーが出ませんし、リロードしなくてもコメントが消えます!」

AI老師:
「素晴らしいぞ、おぬし。この修正を通して、動的UIとサーバー間通信の基本を学べたはずじゃ。」

  1. 今回の学び データの形式と整合性を意識する
    ObjectId のような特殊なデータ型は、JSONで扱える形式に変換する必要がある。 リロードなしのUI更新の重要性
    動的UIを実現するには、フロントエンドとバックエンドの連携が不可欠。 エラー処理の実装
    ユーザーが操作中にエラーが発生した場合でも、適切に通知する仕組みを設ける。

TAKA:
「老師、これでようやくコメント機能が完成形に近づきました!」

AI老師:
「うむ、だがこれで満足してはならぬぞ。次はさらなる機能拡張を目指すのじゃ!」

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です