1

我已将 Hotwire 整合到我最新的 Rails 6 应用程序中。Hotwire/Turbo 部分运行良好,但我有一个普通的用户表单,我不想使用 Hotwire/Turbo。目前,所有表单提交都format.turbo_stream {}在我的控制器中命中,但我希望这个特定的表单改为命中format.html {}块。我注意到Accept表单提交请求的标题text/vnd.turbo_stream.html现在自动包含,但我不确定如何删除它。

表单没有包裹在 turbo_frame_tag 中;页面上的任何地方都没有 Turbo,它看起来很标准:

    <%= form_with model: @user do |f| %>
      <%= f.file_field :avatar, class: "file-input", id: "avatar-input" %>
      <%= f.text_field :name, class: "input wide", placeholder: "Your name here" %>

      <%= f.submit "Next", class: "button-next-submit" %>
    <% end %>

如何在每个表单的基础上强制进行此更改?我以前认为添加 turbo 标签是您更改行为/ Accept 标头的方式,但我现在看到,一旦您format.turbo_stream在控制器方法中添加了一个块,表单就会开始喜欢它。

4

2 回答 2

1

就我而言(rails 7)format: :html还不够。对我有用的是turbo: false

# view.html.erb
<%= form_with model: @user, data: { turbo: false } do |f| %>
...
<% end %>

# controller.rb

def update
  ...
  respond_to do |format|
    format.html {} # format: :html will hit this
    format.turbo_stream {} # format: :turbo_stream will hit this
    # format.json is also an option
  end
end
于 2022-01-04T21:48:03.370 回答
1

弄清楚了。看起来大多数表单助手(form_with,form_for等)都接受format选项哈希(文档链接)中的参数。您提供的值应该与format.x您希望在控制器中击中的块相匹配。例如:

# view.html.erb
<%= form_with model: @user, format: :html do |f| %>
...
<% end %>

# controller.rb

def update
  ...
  respond_to do |format|
    format.html {} # format: :html will hit this
    format.turbo_stream {} # format: :turbo_stream will hit this
    # format.json is also an option
  end
end
于 2021-05-17T19:56:14.493 回答