如何在 simple_form 中的错误中转义 HTML 标签

How to escape HTML tags in errors in simple_form

我正在使用 Rails 3.2.22 和 simple_form 2.1.3

我们的一些字段有重复检查,错误包括对重复记录的 link(因此用户可以检查是否只是重复的名称,或者他们是否不需要创建记录).

但是,我们最近从自定义表单生成器切换到简单表单,现在这些错误消息被转义,显示转义错误。

我在a minimal app中重现了这个问题:

在 Doohickey 模型中:

  validate :unique_name_validation
  def unique_name_validation
    other_doohickey = Doohickey.find_by_name(name)
    if other_doohickey
      errors.add(
        :name,
        "This name is already taken by <a href='/doohickey/#{other_doohickey.id}'>#{other_doohickey.name}</a>"
      )
    end
  end

在UI:

<%= simple_form_for @doohickey do |form| %>
  <%= form.input :name %>
  <%= form.button :submit %>
<% end %>

UI 在页面本身显示 HTML...

/config/initializers.rb 中也有一些配置,但我还没有找到关闭此转义的方法。

如何使用简单表单显示 link 错误?

记住内容不会永远为nil,那么你可以使用html_safe,比如:

"This name is already taken by <a href='/doohickey/#{other_doohickey.id}'>#{other_doohickey.na‌​me}</a>".html_safe