如何将自定义错误html从渲染本身改为两次?

时间:2012-08-04 05:15:49

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

当我尝试使用Ajax创建一个类别时,我的错误消息会出现奇怪的行为。

现在我的错误消息显示如下:

enter image description here

我的create.js.erb和new.js.erb都有相同的代码就是这一行:

$(".cc-form").html("<%= escape_javascript(render(:partial => 'categories/form', locals: { category: @category })) %>");

这是我的分类形式:

<%= form_for(@category, :remote => true, :html => { :class => "add-form", :id => "cform" }) do |f| %>
<fieldset>
   <p>
      <%= f.label :name, "Category Name *" %>
      <br />
      <%= f.text_field :name %>
   </p>
   <div class="form-actions">
     <%= f.submit "Create" %>
   </div>
</fieldset>

以下是启用自定义错误HTML的代码:

# application.rb

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

然后是HTML本身以及错误HTML:

<p>
  <label for="category_name">Category Name *</label><span class="validation-error">&nbsp;can't be blank</span>
  <br>
  <input id="category_name" name="category[name]" size="30" type="text" value=""><span class="validation-error">&nbsp;can't be blank</span>
</p>

我只希望label旁边的错误消息而不是input的右侧。我该怎么做?当我看到它时,这种格式对我来说很棘手。

感谢。

2 个答案:

答案 0 :(得分:1)

我猜您使用field_error_proc非常糟糕,因为将输入字段包装到具有特殊类的元素中是很好的。 Field_error_proc默认情况下标签和输入标签都标有field_with_error,因为引用的对象(:name表示category.name具有错误数组)是相同的。这不是缺陷,因为在这种情况下将标签的颜色更改为红色是有益的。我查看了Rails代码(actionpack/lib/action_view/helpers/tags/label.rb)并且您无法针对标签关闭此行为(它可能是一项功能请求),所以我想如果您只有一个解决方案可以解决您的问题使用普通的HTML作为标签。

我现在有两种解决方案可以解决您的问题:

  • 而不是

    <%= f.label :name, "Category Name *" %>

    使用

    <label for="category_name">Category Name *</label>

    在你看来。

  • 它不太好,但如果您在样式表文件中生成f.label,则可以使用form .label .validation-error { display: none }。我知道这只是一种解决方法,但如果f.label是必要的,那么我就不会知道更好的解决方案。

答案 1 :(得分:0)

页面中有两个<span>标记:

<span class="validation-error">&nbsp;can't be blank</span>

编辑:

好的,看起来标签和输入都需要用自定义错误包装。以下是几个链接:

http://stackoverflow.com/questions/5267998/rails-3-field-with-errors-wrapper-changes-the-page-appearance-how-to-avoid-t

https://gist.github.com/1464315