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

Rails 7/Ruby 3中展示代码块时同步解析块内变量的方法

Rails 7 中展示带动态解析变量的ERB代码片段方案

<%% 是ERB内置的标签转义语法,作用是将后续的<%标记作为普通文本输出,标签包裹范围内的所有内容都不会做ERB解析,这也是<%%= link_to @variable, variable_path %>写法下@variable不会被替换成实际值的原因。
要实现“静态展示ERB标签、动态解析内部变量”的效果,直接用以下方案即可:

方案1:短代码片段直接字符串拼接

适合单行、变量少的简单场景,通过Ruby字符串插值拼出最终要展示的代码文本即可,Rails默认会自动转义HTML特殊字符,不会出现代码标签被浏览器解析的问题:

<%= "<%= link_to #{@variable.inspect}, variable_path %>" %>

写法中用@variable.inspect是为了自动给字符串类型的变量加上双引号,完全符合Ruby代码的语法展示规范,最终页面输出效果正好符合需求:

<%= link_to "Resolved Variable", variable_path %>

如果展示的变量不是字符串类型(比如数字、布尔值、API密钥这类不需要加引号的内容),直接把@variable.inspect换成@variable即可。

方案2:长代码块/多动态变量场景用辅助方法

如果要展示的代码片段很长、包含多个动态变量,拼接字符串可读性太差,可以在app/helpers/application_helper.rb中定义一个通用辅助方法:

def erb_code_sample(&block)
  # 捕获块内渲染完成的内容
  code_content = capture(&block)
  # 还原被转义的ERB起始标记
  code_content = code_content.gsub("&lt;%%", "<%")
  # 包裹code标签,可按需添加代码高亮类名
  content_tag(:code, code_content, class: "language-erb")
end

模板中使用时,静态ERB标记用<%%转义,需要动态解析的变量正常写ERB输出标签即可,结构清晰不容易写错:

<%= erb_code_sample do %>
<%%= link_to <%= @variable.inspect %>, variable_path %>
<% end %>

渲染效果和方案1完全一致,多段代码、多变量场景下维护成本更低。

注意:不要为了省事用raw、html_safe跳过Rails默认的HTML转义,尤其是动态变量包含用户提交内容时,避免引发XSS安全漏洞。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:18:28