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

为何使用ERB输出数据库中表单代码时出现错误?

问题原因与解决方案

嘿,这个问题我之前也踩过坑!核心原因是你把包含ERB标签的代码直接存在数据库里,然后试图用普通的ERB输出语法去渲染它,导致了ERB标签嵌套的语法错误。

举个例子,假设你数据库里存的content是:

<%= form_for :article do |f| %>
  <div class="form-group">
    <%= f.label :title, "Title" %>
    <%= f.text_field :title, class: 'form-control' %>
  </div>
<% end %>

当你在视图里写<%= @page.content %>时,Rails解析ERB模板的时候,会把里面的<%= form_for... %>当成外层<%= %>的一部分,相当于写成了:

<%= "<%= form_for :article do |f| %>..." %>

这种嵌套的ERB标签完全不符合语法规则,自然会抛出错误。


正确的解决方法

要让数据库里的ERB代码被正确解析并渲染,你需要先把存储的字符串转换成可执行的ERB代码,再输出到视图里。

步骤1:在Page模型中添加解析方法

打开你的app/models/page.rb,添加一个方法来处理ERB解析:

class Page < ApplicationRecord
  # 解析content中的ERB代码
  def rendered_content
    # 使用ERB类解析字符串,binding传递当前上下文
    ERB.new(content).result(binding)
  end
end

步骤2:在视图中渲染解析后的内容

在视图里,用raw方法输出解析后的内容(避免Rails自动转义HTML):

<%= raw @page.rendered_content %>

重要安全提醒

⚠️ 一定要注意:如果这个content字段允许普通用户输入内容,绝对不能用这种方法!因为恶意用户可以提交包含恶意Ruby代码的ERB,直接在你的服务器上执行,这会导致严重的安全漏洞。

如果是你自己维护的内容(没有用户输入),那这么做没问题;如果涉及用户输入,建议改用静态HTML或者Markdown(用redcarpet之类的库转成HTML),绝对不要解析用户提交的ERB代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:30:16