提问人:Johan Donado B. 提问时间:11/14/2023 最后编辑:Johan Donado B. 更新时间:11/15/2023 访问量:97
data-turbo-stream=“false” 不适用于带有 POST 方法的表单
data-turbo-stream="false" do not working for form with method POST
问:
我正在尝试通过表单执行 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
答:
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_stream
format
params
<%= 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_stream
format.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 响应,指向控制器的相同方法
评论