🍫

【Ruby on Rails】【TurboStreams】リロードしないとコメント投稿できない問題を解決

2024/08/02に公開

はじめに

現在Ruby on Railsで個人開発を行なっております。
その中でコメント投稿機能を作成し、その内容を非同期で投稿できるようTurboStreamsを使用して実装を行なっています。
実装完了した際には気が付かなかったのですが、1回目投稿する際はリロードしないとコメントが投稿できない仕様になっておりました。(2回目以降は非同期でコメントが投稿される状態)

今回はなぜそのような問題が起きていたのか、記事にしたいと思います。
参考になりましたら幸いです。

前提

今回は表題の件のみ、記事にしております。
そのためコメント投稿機能の作成、およびその非同期処理化の方法には言及しておりません。

原因

参考文献に記載している記事から、問題を解決することができました。
今回この問題に遭遇して初めて知りましたが、form_withメソッドは、<table>で有効な要素ではないので置くことができないそうです。
(tableタグ、trタグ、tdタグも同様)

「tableタグ form_with」で検索すると、多くの記事がヒットします。

修正前コード

<table class="table">
        <tbody id="comments">
        <%= render 'comments/form', comment: @comment, article: @article %>
        <%= render @article.comments, comment: @comment, commentfavorite: @commentfavorite %>
        </tbody>
      </table>

修正後コード

<%= render 'comments/form', comment: @comment, article: @article %>
<table class="table">
        <tbody id="comments">
        <%= render @article.comments, comment: @comment, commentfavorite: @commentfavorite %>
        </tbody>
      </table>

修正前コードは、tableタグ内で'comments/form'ファイルを呼び出しています。
このファイル内で、form_withメソッドを使用していたため、リロードしないとコメントが投稿できないようになっておりました。

最後に

今回のアプリ開発ではUX向上のため、随所にTurboStreamsを使用しています。
非同期処理は苦戦した部分が多く、これまでも他記事で非同期処理の実装に関してまとめていますが、
今回また新たな知見を手に入れることができました。
最後までお読みいただき、ありがとうございました。

参考文献

Discussion