如何从数据库渲染代码并使其在ERB文件中生效
解决数据库中ERB代码生效的方法
要让数据库里存的包含Ruby标签(比如<%= @user.name %>)的代码生效,只靠html_safe是不行的——它仅能让HTML内容不被转义,却无法解析执行ERB模板里的Ruby逻辑。你需要借助Ruby的ERB模板引擎来编译并渲染这段内容,具体步骤如下:
实现方式
直接在视图中通过ERB引擎处理数据库取出的内容:
<%= ERB.new(@emaildetail.description).result(binding) %>
ERB.new():将数据库中存储的字符串转换为可执行的ERB模板对象result(binding):binding会把当前视图/控制器的上下文(包括所有实例变量、可用方法)传递给ERB模板,这样模板里的@user这类变量就能正常读取值。
额外说明
- HTML格式保留:如果渲染后的内容包含HTML标签,默认会被转义,若需要保留HTML格式,可在末尾追加
.html_safe:<%= ERB.new(@emaildetail.description).result(binding).html_safe %> - 安全风险:如果数据库中的内容是普通用户提交的,直接执行ERB会存在严重的代码注入风险,必须严格限制内容来源,只允许可信的内容存入数据库。
内容的提问来源于stack exchange,提问作者Zunaira Ihsan
相关产品推荐
相关产品推荐

