data-turbo-stream=“false” 不适用于带有 POST 方法的表单

data-turbo-stream="false" do not working for form with method POST

提问人:Johan Donado B. 提问时间:11/14/2023 最后编辑:Johan Donado B. 更新时间:11/15/2023 访问量:97

问:

我正在尝试通过表单执行 POST 请求,但我不想执行turbo_stream请求;我想执行 HTML 请求。

我尝试将data-turbo-stream=“false”放在form标签中,但它一直在执行turbo-stream请求。

<%= form_with(model: book, data: {turbo_stream: false}) do |form| %>

这是生成的 HTML:

<form data-turbo-stream="false" action="/books" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="t1PouR2NA4bSleg8OBSRQhvAP1DTSmCkchiTf4aqUIWuPJjG9pJk3J58Z25o9-S2ZXhqFwaUSTfWFn0LvQZF3Q" autocomplete="off">

Ruby 版本:ruby 3.2.2(2023-03-30 修订版 e51014f9c0) [x64-mingw-ucrt]

Rails 版本:轨道 7.0.8

谢谢!!

这是我的创建方法。它总是以TRUBO_STREAM格式响应:

# POST /books or /books.json
  def create
    @book = Book.new(book_params)

    respond_to do |format|

      if @book.save
        format.html { redirect_to book_url(@book), notice: "Book was successfully created." }
        format.turbo_stream
        format.json { render :show, status: :created, location: @book }
      else
        format.html { render :new, status: :unprocessable_entity }
        format.json { render json: @book.errors, status: :unprocessable_entity }
      end
    end
  end
Ruby-on-Rails 涡轮增压

评论


答:

2赞 Alex 11/14/2023 #1

您想添加到您的表单中以禁用 turbo 并使您的表单成为常规 HTML 表单:data-turbo="false"

<%= form_with(model: book, data: {turbo: false}) do |form| %>

data-turbo-stream允许将 Turbo Streams 与 GET 请求一起使用...

data-turbo="false"在链接和表单上禁用 Turbo Drive...

https://turbo.hotwired.dev/reference/attributes


更新

如果您的操作中同时包含两种格式,则优先,但有多种方法可以覆盖它,例如,在 :turbo_streamformatparams

<%= form_with model: book do |form| %>
  <%= hidden_field_tag :format, :html %>

  <%= form.submit %>
<% end %>

更多详情:

https://stackoverflow.com/a/75657122/207090

评论

0赞 Johan Donado B. 11/14/2023
data-turbo=“false” 避免向 Ajax 请求被提出;那不是我想要的。我希望请求继续通过 Ajax,但它响应 HTML 而不是 Turbo_Stream。
0赞 Johan Donado B. 11/14/2023
例如,GET 请求是通过 Ajax 执行的,但响应是 HTML,而不是 TurboStream。
0赞 Alex 11/14/2023
@JohanDonadoB。我不太遵循,你可以用 HTML 响应,turbo 可以处理这两个响应或format.turbo_streamformat.html
0赞 Johan Donado B. 11/15/2023
是的,@Alex,但是如果我输入 data-turbo=“false”,则整个页面都会在响应中充电。我希望它的行为类似于 GET 请求,因为该请求是通过 Ajax 和响应发出的,尽管是 HTML,但页面整体上没有刷新,也就是说 Turbo Drive 继续工作。我不知道我是否清楚..
0赞 Johan Donado B. 11/15/2023
还行。这个想法是以相同的方法处理两个响应类型,因为我的视图必须用 HTML 响应,而其他视图必须用 TURBO_STREAM 响应,指向控制器的相同方法