From 17876b30d4fb38451cb5d98fa8a5f58ad57cf963 Mon Sep 17 00:00:00 2001 From: Jorge Manrubia Date: Thu, 13 Nov 2025 17:00:19 +0100 Subject: [PATCH] Manage comments with streams We replacing the full list of comments within a turbo frame, which didn't feel great when you had several comments. --- app/controllers/cards/comments_controller.rb | 3 +-- app/views/cards/comments/_new.html.erb | 2 +- app/views/cards/comments/create.html.erb | 1 - app/views/cards/comments/create.turbo_stream.erb | 7 +++++++ app/views/cards/comments/destroy.turbo_stream.erb | 1 + app/views/cards/comments/edit.html.erb | 2 +- app/views/cards/comments/update.html.erb | 1 - app/views/cards/comments/update.turbo_stream.erb | 3 +++ test/controllers/cards/comments_controller_test.rb | 6 +++--- 9 files changed, 17 insertions(+), 9 deletions(-) delete mode 100644 app/views/cards/comments/create.html.erb create mode 100644 app/views/cards/comments/create.turbo_stream.erb create mode 100644 app/views/cards/comments/destroy.turbo_stream.erb delete mode 100644 app/views/cards/comments/update.html.erb create mode 100644 app/views/cards/comments/update.turbo_stream.erb diff --git a/app/controllers/cards/comments_controller.rb b/app/controllers/cards/comments_controller.rb index d437c53fa..b7c6c867a 100644 --- a/app/controllers/cards/comments_controller.rb +++ b/app/controllers/cards/comments_controller.rb @@ -5,7 +5,7 @@ class Cards::CommentsController < ApplicationController before_action :ensure_creatorship, only: %i[ edit update destroy ] def create - @card.comments.create!(comment_params) + @comment = @card.comments.create!(comment_params) end def show @@ -20,7 +20,6 @@ class Cards::CommentsController < ApplicationController def destroy @comment.destroy - redirect_to @card end private diff --git a/app/views/cards/comments/_new.html.erb b/app/views/cards/comments/_new.html.erb index 8fda060d2..5d80fed78 100644 --- a/app/views/cards/comments/_new.html.erb +++ b/app/views/cards/comments/_new.html.erb @@ -1,4 +1,4 @@ -
+
diff --git a/app/views/cards/comments/create.html.erb b/app/views/cards/comments/create.html.erb deleted file mode 100644 index 958284c0a..000000000 --- a/app/views/cards/comments/create.html.erb +++ /dev/null @@ -1 +0,0 @@ -<%= render "cards/messages", card: @card %> diff --git a/app/views/cards/comments/create.turbo_stream.erb b/app/views/cards/comments/create.turbo_stream.erb new file mode 100644 index 000000000..a120ac82c --- /dev/null +++ b/app/views/cards/comments/create.turbo_stream.erb @@ -0,0 +1,7 @@ +<%= turbo_stream.before dom_id(@card, :new_comment) do %> + <%= render "cards/comments/comment", comment: @comment %> +<% end %> + +<%= turbo_stream.update dom_id(@card, :new_comment) do %> + <%= render "cards/comments/new", card: @card %> +<% end %> diff --git a/app/views/cards/comments/destroy.turbo_stream.erb b/app/views/cards/comments/destroy.turbo_stream.erb new file mode 100644 index 000000000..cf3eeecaf --- /dev/null +++ b/app/views/cards/comments/destroy.turbo_stream.erb @@ -0,0 +1 @@ +<%= turbo_stream.remove [ @comment, :container ] %> diff --git a/app/views/cards/comments/edit.html.erb b/app/views/cards/comments/edit.html.erb index 66177ee3d..5b020de6d 100644 --- a/app/views/cards/comments/edit.html.erb +++ b/app/views/cards/comments/edit.html.erb @@ -1,5 +1,5 @@ <%= turbo_frame_tag @comment, :container do %> -
+
diff --git a/app/views/cards/comments/update.html.erb b/app/views/cards/comments/update.html.erb deleted file mode 100644 index 07a5ffbc7..000000000 --- a/app/views/cards/comments/update.html.erb +++ /dev/null @@ -1 +0,0 @@ -<%= render "cards/comments/comment", comment: @comment %> diff --git a/app/views/cards/comments/update.turbo_stream.erb b/app/views/cards/comments/update.turbo_stream.erb new file mode 100644 index 000000000..5ad068700 --- /dev/null +++ b/app/views/cards/comments/update.turbo_stream.erb @@ -0,0 +1,3 @@ +<%= turbo_stream.replace [ @comment, :container ] do %> + <%= render "cards/comments/comment", comment: @comment %> +<% end %> diff --git a/test/controllers/cards/comments_controller_test.rb b/test/controllers/cards/comments_controller_test.rb index 76ff0f6fa..856470302 100644 --- a/test/controllers/cards/comments_controller_test.rb +++ b/test/controllers/cards/comments_controller_test.rb @@ -7,14 +7,14 @@ class Cards::CommentsControllerTest < ActionDispatch::IntegrationTest test "create" do assert_difference -> { cards(:logo).comments.count }, +1 do - post card_comments_path(cards(:logo), params: { comment: { body: "Agreed." } }) + post card_comments_path(cards(:logo)), params: { comment: { body: "Agreed." } }, as: :turbo_stream end assert_response :success end test "update" do - put card_comment_path(cards(:logo), comments(:logo_agreement_kevin)), params: { comment: { body: "I've changed my mind" } } + put card_comment_path(cards(:logo), comments(:logo_agreement_kevin)), params: { comment: { body: "I've changed my mind" } }, as: :turbo_stream assert_response :success assert_action_text "I've changed my mind", comments(:logo_agreement_kevin).reload.body @@ -22,7 +22,7 @@ class Cards::CommentsControllerTest < ActionDispatch::IntegrationTest test "update another user's comment" do assert_no_changes -> { comments(:logo_agreement_jz).reload.body.to_s } do - put card_comment_path(cards(:logo), comments(:logo_agreement_jz)), params: { comment: { body: "I've changed my mind" } } + put card_comment_path(cards(:logo), comments(:logo_agreement_jz)), params: { comment: { body: "I've changed my mind" } }, as: :turbo_stream end assert_response :forbidden