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

如何修改Rails中render_to_string方法的模板查找路径?

解决Rails中render_to_string自定义模板路径的问题

你可以通过两种方式修改render_to_string的模板查找路径,不需要把模板放在app/views下:

方法1:添加自定义视图查找路径

通过给控制器实例添加自定义视图路径,让ActionView优先在指定目录下查找模板:

def query(params:, file_path:)
  controller = ActionController::Base.new
  # 将自定义目录添加到视图查找路径的最前端
  controller.prepend_view_path(Rails.root.join('app', 'domains'))
  controller.render_to_string(
    layout: false,
    template: "fulfillment/#{file_path}", # 路径相对于新增的app/domains目录
    locals: params,
  ).strip
end

这样设置后,ActionView会先在app/domains下查找模板,再去默认的app/views查找。

方法2:直接指定模板文件的绝对路径

使用file选项替代template参数,直接传入模板的完整绝对路径:

def query(params:, file_path:)
  ActionController::Base.new.render_to_string(
    layout: false,
    file: Rails.root.join('app', 'domains', 'fulfillment', file_path),
    locals: params,
  ).strip
end

这种方式不需要修改视图查找路径,直接定位到目标模板文件,适合单个或少量非默认路径的模板场景。

为什么原来的写法会报错?

render_to_string的template参数是基于ActionView的默认查找路径(默认仅包含app/views)来解析的,直接传入app/domains/...这种路径会被当成相对于app/views的子路径,自然找不到模板文件,所以需要用上述两种方式调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:41:43