Вот довольно простой метод, так к примеру набросок, использовал setTimeout() для загрузки комментариев:
show.html.erb
<div class="d-block" id="comments-show-columns">
<div id="open_comments" class="mt-4">
<div data-controller="comments">
Загрузка комментариев...
<%= link_to url_for(open: 'true'), class: 'hidden', remote: true, data: {target: "comments.opencomment"} do %>
<% end %>
</div>
</div>
</div>
show.js.erb
<% if params[:open] %>
var opening = document.querySelector("#open_comments")
var pagin = document.querySelector("#comments-show-paginator")
pagin.classList.toggle("hidden")
opening.innerHTML = ('<%=j render(partial: "comments/comment", collection: @comments, locals: {full: true}, continue_thread: 10) %>')
<% end %>
app/javascript/controllers/comments_controller.js
import { Controller } from "stimulus";
export default class extends Controller {
static targets = ["opencomment"]
connect() {
setTimeout(() => this.opencommentTarget.click(), 500 )
}
}
Так же используйте data-turbolinks-permanent чтобы визуально чат не загружался вновь при рендеринге страницы и так же айди open_comments должен содержать id страницы типа open_comments_<%=
post.id %>.
Может есть способы другие то было бы интересно посмотреть.