电邮领域:
<label for="job_client_email">Email: </label>
<input type="email" name="job[client_email]" id="job_client_email">
Run Code Online (Sandbox Code Playgroud)
看起来像这样:

但是,如果电子邮件验证失败,它将变为:
<div class="field_with_errors">
<label for="job_client_email">Email: </label>
</div>
<div class="field_with_errors">
<input type="email" value="wrong email" name="job[client_email]" id="job_client_email">
</div>
Run Code Online (Sandbox Code Playgroud)
看起来像这样:

我怎么能避免这种外观变化?
不能获得<div class="fieldWithErrors">包含验证错误的包装的arround选择标记是否正常?我个人认为没有理由为什么选择标签应该与其他表格标签(输入,textarea)区别对待.
我确实得到了该字段的错误error_messages_for和error_message_on方法.
PS.我已经改变了一点ActionView::Base.field_error_proc,以获得span标签而不是div,但这不是问题.
ActionView::Base.field_error_proc = Proc.new { |html_tag, instance|
#if I puts html_tag here I only get the <input> tags
"<span class=\"fieldWithErrors\">#{html_tag}</span>"
}
Run Code Online (Sandbox Code Playgroud) 所以我有一个像这样的输入元素.你知道,包装元素是一种视觉效果.
<div class="input-wrap">
<input class="blah-blah" />
</div>
Run Code Online (Sandbox Code Playgroud)
当<input>包含错误时,它将是这样的:
<div class="input-wrap">
<div class="field-with-errors">
<input class="blah-blah" />
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
但我想做的是:
<div class="input-wrap field-with-errors">
<input class="blah-blah" />
</div>
Run Code Online (Sandbox Code Playgroud)
我找到了这个页面,它非常接近我的问题
Rails 3:"field-with-errors"包装器改变了页面外观.怎么避免这个?
现在我知道我可以扔掉
config.action_view.field_error_proc = Proc.new { |html_tag, instance|
"#{html_tag}".html_safe
}
Run Code Online (Sandbox Code Playgroud)
避免在<input>有错误的标记周围创建包装标记.但我真正想做的是再次在<input>标签的直接父级上添加"field-with-errors"类.我能这样做吗?ActionView是否包含DOM节点的树结构?