Rails 7+Hotwire/Turbo:能否指定turbo_stream.erb模板路径?
场景
示例代码如下:
class AwesomeController < ApplicationController ... def update respond_to do |format| format.html format.turbo_stream end end ... end
据我理解,format.turbo_stream的默认行为是渲染对应views子目录下与动作同名的*.turbo_stream.erb文件。
因此本场景中,会渲染以下文件:app/views/awesome/update.turbo_stream.erb。
问题
我希望指定另一个位置的文件(例如app/views/somewhere_else/update.turbo_stream.erb),这是否可行?
自助需求
- 哪里可以找到
format.turbo_stream的相关文档? - 我还特别想了解
render方法的turbo_stream选项(例如render turbo_stream: turbo_stream.update(...))的相关文档,该去哪里查找?
解答
- 指定自定义路径的turbo_stream文件完全可行,你可以在
format.turbo_stream块内显式调用render方法并指定文件路径:
def update respond_to do |format| format.html format.turbo_stream { render "somewhere_else/update" } end end
Rails会自动匹配对应格式的模板文件,所以不需要写全.turbo_stream.erb后缀,当然写完整路径也可以正常工作。
- 文档查找指引:
format.turbo_stream的相关内容,可查看Rails官方文档中Action Controller的响应格式章节,以及Turbo官方文档的Streams部分,重点关注ActionController::MimeResponds模块的说明,以及Turbo对Rails响应格式的扩展。- 关于
render turbo_stream: ...的用法,同样可以在Turbo的Streams文档里找到详细示例,同时Rails官方的Action Controller渲染章节也会覆盖render方法的turbo_stream选项说明,包括如何直接用turbo_stream辅助方法生成流响应的语法。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

