当我尝试使用Ajax创建一个类别时,我的错误消息会出现奇怪的行为。
现在我的错误消息显示如下:
我的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"> #{errors}</span>).html_safe
end
然后是HTML本身以及错误HTML:
<p>
<label for="category_name">Category Name *</label><span class="validation-error"> can't be blank</span>
<br>
<input id="category_name" name="category[name]" size="30" type="text" value=""><span class="validation-error"> can't be blank</span>
</p>
我只希望label
旁边的错误消息而不是input
的右侧。我该怎么做?当我看到它时,这种格式对我来说很棘手。
感谢。
答案 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"> can't be blank</span>
编辑:
好的,看起来标签和输入都需要用自定义错误包装。以下是几个链接: