読者です 読者をやめる 読者になる 読者になる

あのねノート

せんせいあのね、パソコンで字が書けるようになったよ

二重投稿をなんとかする~Racketチュートリアル中級編をやってみた(第6回)

なんとかするって何だよって感じですね。実はCSSを作って読みこめるようにするくだりもあったのですが(HTMLだもんね、やりたいよね)、とりあえず飛ばして先に進むことにします。

中級チュートリアル
Continue: Web Applications in Racket

前回「機能的にはいい感じになった」と言ったのにまだ問題があるみたいです。ちょっと見てみましょう。

コメントを追加します。
f:id:momo_moemoe:20160819084622p:plain

コメントが追加されたのが確認できます。
f:id:momo_moemoe:20160819084652p:plain
ここでリロードすると…

コメントが増えます。
f:id:momo_moemoe:20160819084727p:plain

リロードした回数だけ無限にコメントが増えます…うそやん…

リロードを押すたびにコメントを送るというリクエストが送り続けられるので同じコメントが何度も投稿されてしまうみたいです。

解決するために、別のURLに送ってどうにかするみたいな感じっぽい。
redirect/getという関数を使えばいい感じに何とかなるみたいです。

render-blog-page内で定義されたinsert-post-handlerを変更します。

(define (insert-post-handler request)
    (blog-insert-post! ;新規投稿を追加
     BLOG (parse-post (request-bindings request)))
    (render-blog-page (redirect/get)))

前回までは4行目が(render-blog-page request)になっていたため、投稿を追加する際に同じリクエストを送り続けていたようです。

また、コメントを追加するときにも同じ処理が必要です。render-confirm-add-comment-page内に定義されたyes-handler内のrequestを(redirect/get)に変更します。

  (define (yes-handler request)
    (post-insert-comment! a-post a-comment) ;コメント追加
    (render-post-detail-page a-post (redirect/get))) ;追加後の詳細ページを表示

コメント追加について動作確認すると、
コメントを追加して、
f:id:momo_moemoe:20160819093918p:plain

リロードしてもコメントが増えなくなりました!よかった
f:id:momo_moemoe:20160819093949p:plain

とりあえず形にはなったようです。