You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails Turbo渲染局部视图报错:缺失模板问题求助

Turbo响应500错误:找不到partial模板的解决方案

核心问题分析

服务器报错Missing partial exploration/_exploration_widget, application/_exploration_widget,原因是你的_exploration_widget.html.haml存放在views/shared/目录下,但控制器和turbo_stream模板中调用render时未指定shared/前缀,Rails默认会在当前控制器对应的视图目录(views/exploration/)和views/application/中查找模板,因此找不到目标partial。

分步解决方案

  1. 修正控制器中的render路径
    你可以选择两种方式:

    • 方式一:直接指定shared目录的partial路径
      在ExplorationController的status、explore、complete方法中,修改render语句为:
      # status方法
      render partial: 'shared/exploration_widget', locals: { user: current_user }
      
      # explore方法的turbo_stream分支
      format.turbo_stream { render partial: 'shared/exploration_widget', locals: { user: current_user } }
      
      # complete方法的turbo_stream分支
      format.turbo_stream { render partial: 'shared/exploration_widget', locals: { user: current_user } }
      
    • 方式二:利用已创建的turbo_stream模板(更优)
      你已经编写了explore.turbo_stream.erb和complete.turbo_stream.erb,可以让Rails自动渲染对应模板,无需手动指定partial:
      # 修改explore方法的respond_to块
      respond_to do |format|
        format.html { redirect_to root_path }
        format.turbo_stream # 自动匹配app/views/exploration/explore.turbo_stream.erb
      end
      
      # 修改complete方法的respond_to块
      respond_to do |format|
        format.html { redirect_to root_path, notice: 'Exploration complete! You gained 1 land.' }
        format.turbo_stream # 自动匹配app/views/exploration/complete.turbo_stream.erb
      end
      
  2. 修正turbo_stream模板中的render路径
    在explore.turbo_stream.erb和complete.turbo_stream.erb中,将render 'exploration_widget'修改为带shared前缀的路径:

    <!-- explore.turbo_stream.erb -->
    <turbo-stream action="replace" target="exploration">
      <template>
        <%= render 'shared/exploration_widget', user: current_user %>
      </template>
    </turbo-stream>
    
    <!-- complete.turbo_stream.erb -->
    <turbo-stream action="replace" target="exploration">
      <template>
        <%= render 'shared/exploration_widget', user: current_user %>
      </template>
    </turbo-stream>
    
    <turbo-stream action="update" target="user-info-land">
      <template>
        <%= current_user.land %>
      </template>
    </turbo-stream>
    
  3. 额外检查项

    • 确认_exploration_widget.html.haml文件名正确(下划线开头,后缀为.html.haml),且已安装haml-rails gem确保Rails能解析HAML模板。
    • 检查用户模型中是否正确定义了is_exploring?方法:如果is_exploring是数据库布尔字段,Rails会自动生成is_exploring?方法;如果是自定义属性,需手动添加方法定义。

内容的提问来源于stack exchange,提问作者Ricky Mason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 19:39:50