Redmine 5(Rails 6.1)插件模板渲染异常:输出原始HTML
解决Redmine 5中that_attachments_limit插件视图循环加载/原始文本输出问题
针对Redmine 5(基于Rails 6.1)中插件视图渲染的异常问题,以下是两种可行的解决方案:
方案1:明确指定ERB处理器渲染主应用视图
原file参数渲染输出原始文本,是因为Rails 6.1默认未自动解析ERB模板。修改插件内app/views/attachments/_form.html.erb的代码为:
<%= render file: Rails.root.join('app', 'views', 'attachments', '_form.html.erb'), locals: locals, handlers: [:erb], formats: [:html] %>
通过handlers: [:erb]强制Rails解析ERB语法,避免直接输出文件原始内容。
方案2:临时切换视图路径避免循环加载
使用template参数陷入循环,是因为Rails优先加载插件同名视图。可以临时切换视图路径到主应用目录,渲染完成后再恢复:
<% # 保存当前视图路径集合 %> <% original_view_paths = lookup_context.view_paths %> <% # 临时将视图路径设置为主应用目录 %> <% lookup_context.view_paths = ActionView::PathSet.new([Rails.root.join('app', 'views')]) %> <% # 渲染主应用的attachments/_form视图 %> <%= render template: "attachments/_form", locals: locals %> <% # 恢复原视图路径 %> <% lookup_context.view_paths = original_view_paths %>
这种方式确保渲染的是Redmine主应用的原始视图,而非插件自身的同名视图,彻底解决循环加载问题。
内容的提问来源于stack exchange,提问作者Jan Catrysse
相关产品推荐
相关产品推荐

