Rails Hotwire 不更新页面

如何解决Rails Hotwire 不更新页面

我熟悉 ROR,我想在我的项目中使用新的 Hotwire-Rails。当我创建帖子时我很好。但是当我更新/删除帖子时,页面上什么也没发生。你能告诉我我哪里做错了吗? 最后我想在创建新帖子时发出声音,我该怎么做? 感谢您的回答。

我的“Gemfile”

gem 'redis','~> 4.0'
gem 'hotwire-rails','~> 0.1.3'

应用程序.js

require("@rails/ujs").start()
require("@rails/activestorage").start()
require("channels")

Application.html.erb

<body>
  <%= turbo_include_tags %>
  <%= yield %>
</body>

帖子.rb

after_create_commit { broadcast_prepend_to "posts" }
after_update_commit { broadcast_replace_to "posts" }
after_destroy_commit { broadcast_remove_to "posts" }

posts_controller.rb

class PostsController < ApplicationController
  before_action :set_post,only: %i[ show edit update destroy ]

  # GET /posts or /posts.json
  def index
    @posts = Post.all
  end

  # GET /posts/1 or /posts/1.json
  def show
  end

  # GET /posts/new
  def new
    @post = Post.new
  end

  # GET /posts/1/edit
  def edit
  end

  # POST /posts or /posts.json
  def create
    @post = Post.new(post_params)

    respond_to do |format|
      if @post.save
        format.html { redirect_to @post,notice: "Post was successfully created." }
        format.json { render :show,status: :created,location: @post }
      else
        format.html { render :new,status: :unprocessable_entity }
        format.json { render json: @post.errors,status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /posts/1 or /posts/1.json
  def update
    respond_to do |format|
      if @post.update(post_params)
        format.html { redirect_to @post,notice: "Post was successfully updated." }
        format.json { render :show,status: :ok,location: @post }
      else
        format.html { render :edit,status: :unprocessable_entity }
      end
    end
  end

  # DELETE /posts/1 or /posts/1.json
  def destroy
    @post.destroy
    respond_to do |format|
      format.html { redirect_to posts_url,notice: "Post was successfully destroyed." }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_post
      @post = Post.find(params[:id])
    end

    # Only allow a list of trusted parameters through.
    def post_params
      params.require(:post).permit(:title,:body)
    end
end

posts/index.html.erb

<%= turbo_stream_from "posts" %>
<%= turbo_frame_tag "posts" do %>
  <%= render @posts %>
<% end %>

posts/_post.html.erb

<%= post.title %>:
<%= post.body %> 
<%= link_to 'Edit',edit_post_path(post) %> |
<%= link_to 'Destroy',post,method: :delete,data: { confirm: 'Are you sure?' } %> <br>

解决方法

您的控制器中缺少 turbo_stream 格式的处理程序。如果您想要热线更新,您必须将这样的处理程序添加到您的更新和销毁方法中。

format.turbo_stream { turbo_stream.replace/append/prepend(:div_tag_identifer,"<p> Some html content you want to show </p>")

本质上,控制器方法必须呈现 Turbo 响应,其中包括您希望在页面上看到的更改。可能是 turbo_stream.replace(:some_div_id,"some/partial",post: @post) 表示更新,或 turbo_stream.append("some/partiall",post: @post) 表示创建。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?