在Rails ActionView Helpers中更改错误显示格式

时间:2010-10-22 21:17:41

标签: ruby-on-rails ruby-on-rails-3

我正在尝试修改在表单之前显示错误的默认行为,而不是在字段旁边显示错误。

我正在用它来实现这个目标:

  ActionView::Base.field_error_proc = Proc.new do |html_tag, instance| 
      if instance.error_message.kind_of?(Array)
        %(#{html_tag}<span class="validation-error">&nbsp;
         #{instance.error_message.join(',')}</span>) 
      else %(#{html_tag}<span class="validation-error">&nbsp;
       #{instance.error_message}</span>)
      end
   end

但是,出于某种原因,结果html使用实体进行编码,因此不会显示:

<div class="group">
    <label class="label" for="user_city">City and Postcode</label>
    <input class="text_field" id="user_city" name="user[city]" size="30" type="text" value="94-050 Łódź" />
    <span class="description">np. 00-000 Łódź</span>

  </div>
  <div class="group">
    &lt;label class=&quot;label&quot; for=&quot;user_street&quot;&gt;Address&lt;/label&gt;&lt;span class=&quot;validation-error&quot;&gt;&amp;nbsp;
         translation missing: pl, activerecord, errors, models, user, attributes, street, blank&lt;/span&gt;

    &lt;input class=&quot;text_field&quot; id=&quot;user_street&quot; name=&quot;user[street]&quot; size=&quot;30&quot; type=&quot;text&quot; value=&quot;&quot; /&gt;&lt;span class=&quot;validation-error&quot;&gt;&amp;nbsp;
         translation missing: pl, activerecord, errors, models, user, attributes, street, blank&lt;/span&gt;

    <span class="description"> &nbsp;</span>
  </div>

如何避免结果为html_entitied?

1 个答案:

答案 0 :(得分:0)

这是因为你的字符串不安全。你需要在字符串生成后调用html_safe

  ActionView::Base.field_error_proc = Proc.new do |html_tag, instance| 
      if instance.error_message.kind_of?(Array)
        %(#{html_tag}<span class="validation-error">&nbsp;
         #{instance.error_message.join(',')}</span>).html_safe 
      else %(#{html_tag}<span class="validation-error">&nbsp;
       #{instance.error_message}</span>).html_safe
      end
   end