渲染视图而不是 turbo 流中的部分视图

Render view instead of partial from turbo stream

提问人:Frank Koehl 提问时间:9/19/2023 最后编辑:Frank Koehl 更新时间:9/21/2023 访问量:100

问:

我有一个 Rails 控制器操作,它与其他操作共享一个通用视图:

def foo
  # do foo things
  respond_to do |format|
    format.html { render :baz }
    format.turbo_stream { render :baz }
  end
end

我希望从 呈现完整的视图(即不是部分视图)。有没有办法告诉涡轮流“使用此视图”,而不是部分?bazfoo.turbo_stream.erb

否则,我正在考虑将整个视图推入 ,然后对 中的部分 - 即 - 实际上是所有内容 进行单行渲染调用。_baz.html.erbbaz.html.erb

# app/views/[controller]/_baz.html.erb
<!-- full view contents here --> 


# app/views/[controller]/baz.html.erb
<%= render :baz %>

...我可以做到,而且确实有效,但只是感觉卡顿和错误。

Ruby-on-Rails 热线导轨 Turbo

评论


答:

1赞 Alex 9/20/2023 #1

renderin controllers 默认为渲染模板。 in views 默认为 partial。Partial 是一个带有下划线的模板:render

# from controller
render "baz"                      # renders "controller/baz"
render template: "controller/baz"

render "_baz"                     # renders "controller/_baz"
render partial: "baz"
render template: "controller/_baz"
# from view
render "baz"                      # renders "controller/_baz"
render partial: "baz"

render template: "controller/baz" # renders "controller/baz"

顺便说一句,不能解决这种特殊情况吗?只需用相同的框架包裹所有东西,您就不需要turbo_stream。turbo_frame_tag

渲染实际上属于其他控制器操作的模板可以工作,但它确实会变得有点不稳定,并且在进行更改时可能会有点脆弱。我已经看到和/或和成为一种模式。具体控制器操作的模板。Partial 表示可以从其他模板呈现的可重用位,更重要的是,它有望重用,因为它是 partial。index.html.erb_index.html.erbshow.html.erb_show.html.erbindex_index

评论

1赞 Frank Koehl 9/22/2023
选项中的关键字是我一直在寻找的,谢谢!:template