ruby-on-rails Rails:turbo-frame,src请求被解释为format.html

5vf7fwbs  于 2023-10-21  发布在  Ruby
关注(0)|答案(2)|浏览(132)

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

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请求,尽管turbo_frame_request?返回=> true。是什么原因造成的以及如何修复?
P.S. primary_menu.turbo_stream.slim为该控制器操作而存在。
本地版本:
hotwire-rails 0.1.3@hotwired/turbo-rails 7.0.0-beta.5

tvmytwxo

tvmytwxo1#

在有更好的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 %>块 Package 内容。
请记住:

  • turbo_frame_tag名称必须与此处及其原始定义/require匹配。
  • 在该响应中的任何附加的X1 M4 N1 X Package 块将被静默地忽略。
brvekthn

brvekthn2#

这是预期行为,如the Turbo docs中所述
默认情况下,Turbo在提交链接或方法类型为GET的表单时不会添加text/vnd.turbo-stream.html MIME类型
要覆盖此行为,请执行以下操作:
要在应用程序中对GET请求使用Turbo Streams响应,您可以通过向链接或表单添加data-turbo-stream属性来指示Turbo包含MIME类型。
答案也是here
这样做的原因是,对于GET请求,使用Turbo * 帧 * 而不是 * 流 * 更有意义。

相关问题