Rails:请求src的turbo帧被解释为format.html



我注意到turbo帧通过src属性设置延迟加载的奇怪行为:

nav
= turbo_frame_tag 'primary_menu', src: primary_menu_path
: def primary_menu
:   respond_to do |format|
:     format.turbo_stream
> :     format.html { binding.pry ; render plain: 'should not reach this block' }
:   end
: end
)> turbo_frame_request?
=> true

出于某种原因,它被解释为常规请求的html请求,尽管CCD_ 2返回=>true。是什么原因造成的?如何修复?

第页。S.primary_menu.turbo_stream.slim对于该控制器动作是存在的。

本地版本:

hotwire-rails 0.1.3@hotwired/turbo-rails 7.0.0-beta.5

在对turbo内部结构有更好了解的人正确解释之前,下面是一个对我有效的方法:

<%= turbo_frame_tag 'primary_menu', src: primary_menu_path %>

将被解释为HTML请求:

def primary_menu
# load your thing
respond_to do |format|
format.html
end
end

在您的primary_menu.html.erb中,请确保使用<%= turbo_frame_tag 'primary_menu' do %>块包装您的内容。

请记住:

  • turbo_frame_tag名称必须在此处与其原始定义/需求相匹配
  • 则该响应中的任何附加的CCD_ 11封装块将被静默地忽略

这是Turbo文档中所述的预期行为

默认情况下,Turbo在提交链接或方法类型为GET 的表单时不会添加text/vnd.Turbo-stream.html MIME类型

要覆盖此行为:

要在应用程序中使用Turbo Streams响应和GET请求,您可以通过在链接或表单中添加数据Turbo流属性来指示Turbo包含MIME类型。

这里也有答案

原因是对于GET请求,使用Turbo而不是更有意义

最新更新